Python线程什么时候快?

mva*_*een 11 python multithreading gil

我们都知道GIL的恐怖,我已经看到很多关于正确使用该multiprocessing模块的时间的讨论,但我仍然觉得我对Python中的线程化时没有很好的直觉(聚焦主要是关于CPython)是正确的答案.

GIL不是一个重大瓶颈的实例是什么?线程是最合适的答案的用例类型是什么?

Mic*_*ior 14

如果你有很多阻塞I/O,线程真的才有意义.如果是这种情况,那么一些线程可以在其他线程工作时休眠.如果线程受CPU限制,那么您不太可能从多线程中看到很多好处.

请注意,多处理模块虽然更难以编码,但它使用了单独的进程,因此不会遭受GIL的缺点.


aga*_*rs3 9

既然您似乎在寻找示例,那么这里有一些不在我的脑海中并从搜索CPU绑定和I/O绑定示例中抓取(我似乎找不到很多).我不是专家,所以请随意纠正我错误分类的任何内容.同样值得注意的是,推进技术可以将问题从一个类别转移到另一个类别.

CPU绑定任务(使用multiprocessing)

  • 数学函数的数值方法/近似(计算pi的数字等)
  • 图像处理
  • 执行卷积
  • 计算图形编程的变换(可能由GPU处理)
  • 音频/视频压缩/解压缩

I/O绑定任务(threading可能没问题)

  • 通过网络发送数据
  • 写入/读取磁盘
  • 要求用户输入
  • 音频/视频流