猿问

Python支持多线程吗?它可以加快执行时间吗?

Python支持多线程吗?它可以加快执行时间吗?

关于多线程是否在Python中工作,我有点困惑。

我知道有很多关于这方面的问题,我已经读了很多,但我仍然感到困惑。我从自己的经验中了解到并且已经看到其他人在StackOverflow上发布他们自己的答案和示例,在Python中确实可以实现多线程。那么为什么每个人都一直说Python被GIL锁定并且一次只能运行一个线程呢?它显然确实有效。或者是否有一些区别我没有到这里?

许多海报/受访者也一直提到线程有限,因为它没有使用多个核心。但我会说它们仍然有用,因为它们可以同时工作,从而更快地完成组合工作量。我的意思是为什么甚至会有一个Python线程模块呢?

更新:

谢谢你到目前为止的所有答案。我理解它的方式是多线程只能并行运行某些IO任务,但是一次只能运行一个用于CPU绑定的多个核心任务。

我不完全确定这对我来说在实际意义上是什么意思,所以我只举一个我想要多线程的任务的例子。例如,假设我想遍历很长的字符串列表,我想对每个列表项执行一些基本的字符串操作。如果我拆分列表,将每个子列表发送给我的循环/字符串代码在新线程中处理,并将结果发送回队列,这些工作负载会大致同时运行吗?最重要的是,理论上这会加快运行脚本所需的时间吗?

另一个例子可能是如果我可以在四个不同的线程中使用PIL渲染和保存四个不同的图片,并且这比一个接一个地逐个处理图片更快?我想这个速度组件是我真正想知道的,而不是正确的术语。

我也知道多处理模块,但我现在主要关心的是中小型任务负载(10-30秒),所以我认为多线程会更合适,因为子进程可能很慢启动。


陪伴而非守候
浏览 7304回答 3
3回答

Qyouu

是。:)您有低级线程模块和更高级别的线程模块。但是你只想使用多核机器,多处理模块就是你要走的路。从文档引用:在CPython中,由于Global Interpreter Lock,只有一个线程可以同时执行Python代码(即使某些面向性能的库可能会克服此限制)。如果您希望应用程序更好地利用多核机器的计算资源,建议您使用多处理。但是,如果要同时运行多个I / O绑定任务,则线程仍然是一个合适的模型。

哆啦的时光机

在Python中允许线程化,唯一的问题是GIL将确保一次只执行一个线程(没有并行性)。所以基本上如果你想多线程代码来加速计算它不会加速它,因为一次只执行一个线程,但如果你用它来与数据库进行交互,例如它会。
随时随地看视频慕课网APP

相关分类

Python
我要回答