Python 中的真正并行性



由于GIL的存在,在python中是否有可能具有真正的并行性?据我所知,每个线程在执行之前都会获取 GIL,而其他线程则等到 GIL 被释放。如果它是一个瓶颈,为什么要有 GIL

Python,该语言不一定强制执行GIL。它是语言的不同实现,可能有也可能没有 GIL。

CPython(事实上的实现)有GIL。因此,在使用它时,您不能拥有真正的并行线程。但是,您可以使用多处理来获得并行性。PyPy,该语言的另一个实现现在也有 GIL。

还有其他Python语言的实现(例如Jython和IronPython)没有GIL,您可以使用线程来运行并行操作。

Cython 有一个 GIL,但您可以使用 with 语句发布它。

所提项目的链接:

  • http://www.jython.org/
  • http://ironpython.net/
  • http://pypy.org/
  • http://cython.org/

有关此主题的更多资源:

  • 关于编程堆栈交换的问题:https://softwareengineering.stackexchange.com/questions/186889/why-was-python-written-with-the-gil(感谢@Rogalski)

  • Python Wiki: https://wiki.python.org/moin/GlobalInterpreterLock

  • 大卫·比兹利的演讲 - https://www.youtube.com/watch?v=Obt-vMVdM8s

  • 杰夫·克虏伯的文章:https://jeffknupp.com/blog/2013/06/30/pythons-hardest-problem-revisited/

如果你想了解python中的GIL,我建议从这里开始阅读:

https://wiki.python.org/moin/GlobalInterpreterLock

请参阅消除 GIL 部分,了解为什么 python 仍然具有 GIL 的解释。

最新更新