一、python中多进程、多线程、进程池和线程池、协程的简单理解举例:
1、在python中由于GIL(全局解释器锁)的存在,同一个时刻只能有一个线程在一个cpu上运行,所以使用多线程的时候,利用不上cpu多核的性能,
所以,多线程适合使用在io密集型计算中,而且需要注意的是,只要多线程中有一个线程对cpu消耗大,那么整体的性能立马会大大下降。
2、GIL的存在是python历史遗留的问题,短时间不是很有希望得到大大改善,虽然也有很多人在为他努力。
所以,在cpu密集型计算时候,建议使用多进程。或者使用多进程结合多线程的方法提高程序性能。
3、另外,无论是多线程还是多进程,它的创建和消耗都会消耗cpu,所以建议使用线程池、进程池的方式,减少频繁的创建和消耗线程、进程而消耗cpu。
4、协程和线程的区别在于,线程的调度是cpu控制,而协程是程序控制(生成器原理),效率会高很多,使用协程的时候,当其中一个任务等待io时,会自动切换到另一个,保证不会让io有空闲,建议使用gevent模块
5、协程和多线程适合用再io密集型,多进程时候用再cpu密集型(利用上多核cpu), 具体怎么使用三者,需要根据业务实际情况测试后才知道。
二、多线程可以使用threading模块,但是建议使用concurrent.futures.ThreadPoolExecutor模块
使用map方法可以自动收集汇总各线程的结果集,语法简洁,其中返回是一个generator生成器
from co