Python——ProcessPoolExecutor和ThreadPoolExecutor

Python 中如何使用CPU的多个核


全局解释器锁(GIL)

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

ThreadPoolExecutor

  • 使用多线程,适用于IO密集型的任务
    1
    2



ProcessPoolExecutor

  • 使用多进程,突破GIL的限制,绕开GIL,成功使用多个CPU核
    1
    2