当数据的爬虫量越来越大的时候,除了要考虑存储的方式外,还需要考虑爬虫的速度问题。前面的爬虫都是串行爬取,只有当一次爬取完之后才进行下一次爬取,这样极大的限制了爬取的速度和效率。本文主要讲解多线程和多进程的概念,并通过案例对串行爬虫和多进程爬虫的性能进行对比。

多线程和多进程概述

当计算机运行程序时,就会创建包含代码和状态得进程。这些进程会通过计算机的一个和多个CPU执行。不过,同一时刻每个CPU只会执行一个进程,然后再不同进程间快速切换,这样就给人以多个程序同时运行的感觉。同理,在一个进程中,程序的执行也是在不同线程间进行切换的,每个线程执行程序的不同部分。

这里简单的做个类比:有一个大型工厂,该工厂负责生产玩具:同时工厂下又有多个车间,每个车间负责不同的功能,生产不同玩具的零件:每个车间里又有多个车间工人,这些工人互相合作,彼此共享资源来共同生产某个玩具零件等。这里的工厂就相当于一个网络爬虫,而每个车间相当于一个进程,每个车间工人相当于线程。这样,通过多线程和多进程,网络爬虫就能高效、快速的进行下去。

多进程的使用方法

Python进行多进程爬虫使用了multiprocessing库,此处使用multiprocessing库的进程池方法进行多进程爬虫,使用方法的代码如下。

from multiprocessing import Poolpool = Pool(processes=4)        #创建进程池pool.map(func,iterable[,chunksize

多线程比串行进程多出的优势在哪里相关推荐

  1. Linux下sqlite3多线程和串行模式

    sqlite3支持三种模式:单线程模式,多线程模式和串行模式. 模式可在编译,启动时或运行时设置,一般来讲,启动时的设置会覆盖编译时的设置,运行时则会覆盖启动时或编译时的设置.但是一旦单线程模式被设置 ...

  2. 并发、并行、串行、同步、异步、阻塞、非阻塞

    并发.并行.串行.同步.异步.阻塞.非阻塞 实际上同步与异步是针对应用程序与内核的交互而言的. 同步过程中进程触发IO操作并等待(也就是我们说的阻塞)或者轮询的去查看IO操作(也就是我们说的非阻塞)是 ...

  3. Fabric背书过程中链码是并行还是串行?

    声明:链码开发语言是golang,源码分析是基于fabric 1.4.0版本 链码开发的时候,总是有一个疑问,链码的调用到底是并行还是串行?如果是并行,就需要我们对一些线程不安全的对象进行保护,反之则 ...

  4. linux c进程线程的面试问题,linux 多线程面试题_linux进程线程_linux 线程 pthread_create...

    你写了一个简单的mandelbrot set程序,也就是说用ps命令行是可以看见多个线程,win32里同一个进程里各个线程之间是共享数据段的,win32的进程管理方式与unix上有着很大区别.adob ...

  5. CRC校验 串行 并行 长除 移位 查表 矩阵

    CRC校验的几种类型: 长除法,也叫直接计算法 移位寄存器,也叫线性移位 查表法 并行算法 一些有用的网页: CRC并行推导 https://blog.csdn.net/Old_Street/arti ...

  6. java 多线程 串行 加锁_Java多线程(2)线程锁

    多线程访问同一个资源进行读写操作,就很容易出一些问题(比如我们常见的读者写者,生产者消费者模型)所以我们会选择对他们设置信号量或者加锁,来限制同一个时刻只有一个线程对某个对象进行操作. 多线程是一个蛮 ...

  7. 并发、并行、同步、异步、进程,线程、串行、并行?一文弄懂八大概念

    并发.并行.同步.异步.进程,线程.串行.并行?一文弄懂八大概念 参考博文:并发.并行.串行.同步.异步的区别? java多线程详解(并发,并行,同步) 文章目录 并发.并行.同步.异步.进程,线程. ...

  8. 我要理解的CPU、核心,进程、线程,串行、并发、并行

    注意看修饰词. 1.计算机硬件基本组成 一个计算机(冯·诺依曼结构)[主要]硬件组成: 主板:是"交通枢纽",各个部件工作的所在平台,它负责将各个部件紧密连接在一起,各部件通过主板 ...

  9. 并行,串行,流水线,线程和进程傻傻分不清楚

    漫谈并行,串行,流水线,线程和进程 在说并行串行流水线时,我们先要说一个概念双核四程,四核八程代表什么. 双核四程 指处理器中有两个核心, 但是利用了超线程技术,一个核心就有2个线程,所以两个核心就有 ...

最新文章

  1. aspose.cells 无法读取公式值_隐藏 Excel表格、公式的9种方法
  2. PonyAI的首份美国无人出租成绩单:总数1271趟,15%拼车
  3. delphi word类型_现在的女生喜欢什么类型的男生?|What Kind of Boys Do Girls Like?
  4. WPF中如何重新定义Main函数
  5. 【C/C++】基本数据类型的隐式类型转换
  6. python之argmax
  7. Servlet与JSP项目实战 — 博客系统(上)
  8. 小白能读懂的 《手把手教你学DSP(TMS320X281X)》第六章 时钟和系统控制
  9. Cisco路由器VLan隔离局域网广播包的配置实验
  10. em表示什么长度单位_CSS的长度单位(em)与em标签
  11. android计算器退格键,计算器有关问题,如何写退格键
  12. 计算机北大核心期刊不要审稿费,这些核心医学期刊不收取审稿费(建议收藏)...
  13. js算法---寻找连续数组中的缺失数
  14. 数据加密 RSA非对称加密篇
  15. javascript全笔记-基础版(尚硅谷视频李立超老师)
  16. 华为系统鸿蒙命名的哲学含义,鸿蒙什么意思?华为自研操作系统为何叫鸿蒙?
  17. 死亡搁浅 服务器不稳定,[收集]死亡搁浅现有bug临时解决方案
  18. 北京荣达对便携式打印机的行业分析
  19. Day7 牛客 回文素数
  20. Docker精华问答 | Docker commit如何用?

热门文章

  1. 广义互相关 matlab,关于小波分析和广义互相关
  2. javascript函数总结
  3. 使用MMD模型通过Kivicube平台制作WebAR与小程序AR
  4. 无法在已有的 xxxxxxx“上还原文件 zzz。请重新发出 RESTORE 语句,用 WITH REPLACE 来覆盖原先存在的文件
  5. 八、基于多源数据建成区提取——Landsat数据大气校正
  6. 微软电话(中国)激活操作步骤
  7. HTML5 drag和drop的亲手实践
  8. 在主窗口中打开一个子窗口,主窗口和子窗口怎么传递参数?
  9. 红米1联通版_标注:2013023_官方线刷包_救砖包_解账户锁
  10. 光电耦合器原理及应用介绍