❝Python对并发编程的支持非常丰富,可以使用多线程、多进程、协程等方式进行并发编程。那么,应该如何选择呢?
❞
Python并发编程有哪些方式
Python并发编程有三种方式:
-
多线程 Thread
-
多进程 Process
-
多协程 Coroutine
什么是CPU密集型计算、IO密集型计算?
CPU密集型(CPU-bound):
CPU密集型也叫计算密集型,是指I/O在很短的时间就可以完成,CPU需要大量的计算和处理,特点是CPU占用率相当高。
例如:
-
压缩解压缩 -
加解密 -
正则表达式搜索
IO密集型(I/O bound)
IO密集型指的是系统运作大部分的状态是CPU在等待IO的读写操作,CPU占用率依然较低。
例如:
-
文件处理程序 -
网络爬虫程序 -
读写数据库程序
多线程,多进程,多协程的对比
python并发编程有三种方式: 「多线程Thread」、「多进程Process」、「多协程Coroutine」。
多线程Process(multiprocessing)
「优点:」
-
相比进程,更轻量级,占用资源少
「缺点:」
-
相比进程:多线程只能并发执行,不能利用多CPU(GIL) -
相比协程:启动书面有限制,占用内存资源,有线程切换开销
使用于:IO密集型计算、同时运行的任务数目要求不多。
多进程Thread(threading)
「优点:」
-
可以利用多核CPU并行运算
「缺点:」
-
占用资源最多、可以启动数目比线程少
使用于:CPU密集型计算
多协程Coroutine(asyncio)
「优点:」
-
内存开销最少。启动协程数目最多
「缺点:」
-
支持的库有限制(aiohttp VS requests)、代码实现复杂
适用于:IO密集型计算、需要超多任务运行、但有现成库支持的场景
怎样根据任务选择对应技术
-
如果是CPU密集型计算,使用多进程multiprocessing -
如果是IO密集型计算,则考虑多线程或者多线程。 -
如果任务量大,有现成协程库支持,协程实现的复杂度可接受则首选协程,否则选线程。
本文由 mdnice 多平台发布