Python中进程、线程、协程区别
多进程
适合密集CPU任务,充分利用多核CPU资源(大量的并行计算,循环计数运算)
缺点:
多个进程之间的通信成本和切换开销很高,如果程序涉及到大量数据通信或切换任务,不适合用多进程
multiprocessing
多线程
密集IO任务(网络IO,磁盘IO,数据库IO)
threading,multiprocessing.dummy
缺点:同一个时间内存一次只能运行一个线程,可以做到并发,但是不能做到并行
优点:通信方便,切换开销小(非常适合爬虫这种不断切换任务的场景)
协程
微线程,不由操作系统调度(没有CPU切换开销),特点是在单个线程上切换多个函数任务,切换掉段任务由程序员控制,不涉及操作系统管理,也不需要处理器
gevent
gevent.monkey.patch_all():降Python底层的网络库(socket,select)打个补丁,在执行网络任务时可以按异步的方式执行(涉及到网络IO阻塞会自动切换协程)
优点:
执行任务基于程序员管理,不需要操作系统调度,没有切换开销,执行效率非常高。
缺点:
单线程执行,不能处理密集CPU任务,本地磁盘密集IO任务
注意:协程是在原有的网络请求库上打了补丁,所以适用于爬虫。

被折叠的 条评论
为什么被折叠?



