一尘不染

python能够在多个内核上运行吗?

python

问题:由于python使用“ GIL”,python是否能够同时运行其单独的线程?


信息:

看完这篇文章后,我对python是否能够利用多核处理器的不确定性产生了怀疑。尽管python做得很好,但认为它缺乏如此强大的功能实在是很奇怪。因此,我感到不确定,因此决定在这里提问。如果我编写的是多线程程序,它是否可以在多个内核上同时执行?


阅读 144

收藏
2020-12-20

共1个答案

一尘不染

答案是“是,但是…”

但是当您使用常规线程进行并发时,cPython不能。

您可以使用或之类的东西multiprocessingcelerympi4py可以将并行工作拆分为另一个进程。

或者,您可以使用JythonIronPython之类的东西来使用没有GIL的替代解释器。

一种较软的解决方案是使用不会在GIL上运行的库来执行繁重的CPU任务,例如numpy可以在不保留GIL的情况下进行繁重的工作,因此可以继续使用其他python线程。您也可以通过ctypes这种方式使用库。

如果您不进行CPU限制工作,则可以完全忽略GIL问题(有点),因为python在等待IO时不会获取GIL。

2020-12-20