Python 中如何使用CPU的多个核
全局解释器锁(GIL)
- 由于CPython解释器本身就不是线程安全的,所以需要一个全局解释器锁,以保证同一时刻仅有一个线程在执行Python的字节码
- 由于GIL的存在,造成了Python多线程不是不能真正并行,尽管有多个CPU核心也不能全都用上
- 由于标准库中执行所有阻塞型IO操作的函数,在等待操作系统返回结果时都会释放GIL,这意味着Python在这个层次上可以使用多线程,所以对于IO密集型任务来说,多线程是有作用的
ThreadPoolExecutor
- 使用多线程,适用于IO密集型的任务
1
2
ProcessPoolExecutor
- 使用多进程,突破GIL的限制,绕开GIL,成功使用多个CPU核
1
2