1. 进程
1)适合CPU密集型任务,eg:计算密集型场景,多并发,大量计算任务
2)数据分片:可以将数据分片处理的任务适合用多进程代码处理,核心思路是将data分片,对每一片数据处理返回结果(可能是无序的),然后合并。应用场景:多进程爬虫,类mapreduce任务。
3)只有Python多进程才能利用CPU多核资源,做到真正的多并发
3. 线程
1)对于python来说, 多线程是python的软肋
2)Python多线程适用于I/O密集型场景,如解决网络IO、磁盘IO阻塞问题,例如文件读写、网络数据传输等;,
3)Python的线程虽然是真正的线程,但解释器执行代码时,有一个GIL锁:Global Interpreter Lock,任何Python线程执行前,必须先获得GIL锁,然后,每执行100条字节码,解释器就自动释放GIL锁,让别的线程有机会执行。这个GIL全局锁实际上把所有线程的执行代码都给上了锁,所以,多线程在Python中只能交替执行,即使100个线程跑在100核CPU上,也只能用到1个核。(因为同一个进程中的线程共享资源,所以要有互斥操作)
4)不要指望多线程能有效利用多核。如果一定要通过多线程利用多核,那只能通过C扩展来实现,不过这样就失去了Python简单易用的特点。Python虽然不能利用多线程实现多核任务,但可以通过多进程实现多核任务。多个Python进程有各自独立的GIL锁,互不影响。
5
关于提高并发量,python进程、线程和协程的区别
最新推荐文章于 2024-03-07 20:32:09 发布
本文介绍了Python中的进程、线程和协程在处理并发时的区别。进程适合CPU密集型任务,能充分利用多核资源;线程在Python中受到GIL限制,更适合I/O密集型场景;协程虽单线程运行,但能减少上下文切换,适合高并发场景。多进程和协程可实现多核利用,而多线程在多核环境下可能导致线程颠簸,效率降低。
摘要由CSDN通过智能技术生成