Python并发编程
简介
- 多线程:threading,利用 cpu 和 io可以同时执行的原理,让 CPU 不会等待 IO 完成
- 多进程:multiprocess,利用多核 CPU 的能力,真正的并行执行任务
- 异步IO:asynio,在单线程利用 CPU 和 IO 同时执行的原理,实现函数异步执行
- 使用 Lock 对共享资源加锁,防止冲突访问
- 使用 Queue 实现不同线程/进程之间的数据通信,实现生产者-消费者模式
- 使用线程池 Pool 进程池 Pool,简化线程/进程的任务提交、等待结束、获取结果
- 使用subprocess启动外部程序的进程,并进行输入输出交互
怎样选择多进程、多线程、多协程
并发编程的三种方式
多线程 Thread
多进程 Process
多协程 Coroutine
CPU 密集型计算和 IO 密集型计算
CPU密集型(CPU-bound):
CPU密集型也叫计算密集型,是指 I/O 在很短的时间就可以完成,CPU 需要大量的计算和处理,特点是CPU占用率相当高。
例如:压缩解压缩、加密解密、正则表达式搜索
IO 密集型(I/O bound):
IO 密集型指的是系统运作大部分的状况是 CPU 在等 I/O (硬盘/内存)的读/写操作,CPU 占用率仍然较低。
例如:文件处理程序、网络爬虫程序、读写数据库程序
根据任务选择对应技术
全局解释器锁 GIL
Python 速度慢的两大原因
GIL是什么
为什么有GIL这个东西
怎样规避 GIL 带来的限制