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

2024-04-26 03:54:10 发布

您现在位置:Python中文网/ 问答频道 /正文

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


信息:

在阅读了this之后,我不太确定python是否能够利用多核处理器。尽管python做得很好,但想到它会缺乏如此强大的能力,感觉真的很奇怪。所以觉得不确定,我决定问这里。如果我写的程序是多线程的,它能在多个内核上同时执行吗?


Tags: 程序信息利用能力处理器this线程内核
3条回答

CPython(Python的经典和流行实现)不能有多个线程同时执行Python字节码。这意味着计算绑定程序将只使用一个内核。在C扩展(如numpy)中发生的I/O操作和计算可以同时操作。

Python的其他实现(如Jython或PyPy)的行为可能不同,我不太清楚它们的细节。

通常的建议是使用多个进程而不是多个线程。

Python线程不能利用许多核心。这是因为在python的C实现(cPython)中有一个称为GIL(全局解释器锁)的内部实现细节,这几乎可以肯定是您所使用的。

解决方法是为此开发的multiprocessing模块http://www.python.org/dev/peps/pep-0371/

文档:http://docs.python.org/library/multiprocessing.html

(或使用并行语言。)

答案是“是的,但是…”

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

您可以使用^{}^{}^{}之类的方法将并行工作拆分为另一个进程

或者可以使用类似JythonIronPython的东西来使用没有GIL的替代解释程序。

较软的解决方案是使用不与GIL冲突的库来执行繁重的CPU任务,例如^{}可以在不保留GIL的情况下完成繁重的工作,这样其他python线程就可以继续。也可以这样使用^{}库。

如果您不做CPU绑定的工作,那么可以完全忽略GIL问题(某种程度上),因为python在等待IO时不会获取GIL。

相关问题 更多 >