python爬虫中多线程和多进程的示例分析

发布时间:2021-05-08 09:30:45 作者:小新
来源:亿速云 阅读:204

小编给大家分享一下python爬虫中多线程和多进程的示例分析,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!

python是什么意思

Python是一种跨平台的、具有解释性、编译性、互动性和面向对象的脚本语言,其最初的设计是用于编写自动化脚本,随着版本的不断更新和新功能的添加,常用于用于开发独立的项目和大型项目。

一、进程/线程

表示可以同时执行多个任务,进程和线程的调度是由操作系统自动完成。

1、进程:是线程的集合,是由一个或多个线程构成的。

每个进程都有自己独立的内存空间,不同进程之间的内存空间不共享。

进程之间的通信有操作系统传递,导致通讯效率低,切换开销大。

2、线程:是操作系统进行运算调度的最小单位,是进程中的一个最小运行单元。

一个个进程可以有多个线程,所有线程共享进程的内存空间,通讯效率高,切换开销小。

二、多进程/多线程

1、多进程

进程的调度:当有多个进程并行执行时,每个进程得到的时间片的时间不一样,哪个进程接受哪个请求以及执行完成的时间都是不定的,所以不处理的话会输出乱序。

python中多进程用到的模块是multiprocessing(python就是模块多…一些基本的,常用的都已经有模块了……),multiprocessing[下面简称mp]的很大的一部分与threading模块使用同一套API

进程池:Pool【感觉已经是mp的高级用法了】,可以提供指定数量的进程供用户调用,每当有请求提交到Pool的时候,如果进程池还没有满,就会创建一个新的进程来执行请求,如果进程满了,则请求将会被告知先等待,直至进程池中有进程结束才会放入,以执行请求。

简单来说,就是进程池可创建多个进程,这些进程就像是随时待命的士兵,准备执行任务。

2、多线程

不依赖CPU的操作我们是可以通过使用多线程来大大提高程序的效率。

Python一般通过threading库来实现多线程。threading库是对thread库进行包装后的产物。

并发(concurrency)

指同一时刻只能有一条指令执行,但多个线程的对应的指令被快速轮换地执行,宏观上看起来多个线程在同时运行,但微观上只是这个处理器在连续不断地、在多个线程之间切换和执行。

并行(parallel)

指同一时刻有多条指令在多个处理器上同时执行,并行必须要依赖于多个处理器,不论宏观上还是微观上,多个线程都是在同一时刻一起执行的。

GIL 全局解释器锁:线程的执行权限,在Python的进程里只有一个GIL。一个线程需要执行任务,必须获取GIL。

好处:直接杜绝了多个线程访问内存空间的安全问题。

坏处:Python的多线程不是真正多线程,不能充分利用多核CPU的资源。但是,在I/O阻塞的时候,解释器会释放GIL。

线程实现

1)通过继承threading当中的Thread类

2)然后再init里调用Thread的init方法(或者用super调用超类的构造函数),就可以完成对一个线程的初始化创建工作。

3)然后我们可以通过重写类的run方法来定义这个线程的要做的事。

4)创建一个这个类的对象。

5)然后调用这个对象的start方法就让这个线程开始工作了。

6)调用对象的join方法等待这个线程结束工作

三、总结

1、多进程:

密集CPU任务,需要充分使用多核CPU资源(服务器,大量的并行计算)的时候,用多进程。

想要提高执行效率,大部分开发者是通过编写多进程来提高运行效率,使用multiprocessing进行并行编程。

缺陷:

每个进程都会有自己的内存,数据多的话,内存会吃不消。

多个进程之间通信成本高,切换开销大。

2、多线程:

密集I/O任务(网络I/O,磁盘I/O,数据库I/O)使用多线程合适。

多线程是为了同步完成多项任务,通过提高资源使用效率来提高系统的效率。线程是在同一时间需要完成多项任务的时候实现的。

缺陷:

在编写多线程代码时候,要注意死锁的问题、阻塞的问题、以及需要注意多线程之间通信的问题(避免多个线程执行同一个任务)。

同一个时间切片只能运行一个线程,不能做到高并行,但是可以做到高并发。

看完了这篇文章,相信你对“python爬虫中多线程和多进程的示例分析”有了一定的了解,如果想了解更多相关知识,欢迎关注亿速云行业资讯频道,感谢各位的阅读!

推荐阅读:
  1. 多线程和多进程的选择
  2. Python中多线程与多进程对比的示例分析

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

python 线程 进程

上一篇:Java中会遇见的面试题有哪些

下一篇:Android Studio安装完后activity_main.xml前几行报错怎么解决

相关阅读

您好,登录后才能下订单哦!

密码登录
登录注册
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》