Python 中的真正并行性
True parallelism in Python
由于 GIL 的存在,是否有可能在 python 中实现真正的并行?据我所知,每个线程在执行之前获取 GIL,而其他线程则等待 GIL 被释放。既然是瓶颈,为什么还要 GIL
Python,语言不一定强制GIL。这是语言的不同实现,可能有也可能没有 GIL。
CPython(事实上的实现)有 GIL。所以你在使用它时不能拥有真正的并行线程。但是,您可以使用多处理来获得并行性。 PyPy,该语言的另一种实现现在也有 GIL。
还有 Python 语言的其他实现(例如 Jython 和 IronPython)没有 GIL,您可以使用线程来 运行 并行操作。
Cython 有一个 GIL,但您可以使用 with
语句释放它。
提到的项目链接:
有关此主题的更多资源:
关于编程堆栈交换的问题:https://softwareengineering.stackexchange.com/questions/186889/why-was-python-written-with-the-gil(感谢@Rogalski)
Python 维基:https://wiki.python.org/moin/GlobalInterpreterLock
David Beazley 的演讲 - https://www.youtube.com/watch?v=Obt-vMVdM8s
来自 Jeff Knupp 的文章:https://jeffknupp.com/blog/2013/06/30/pythons-hardest-problem-revisited/
如果您想了解 python 中的 GIL,我建议您从这里开始阅读:
https://wiki.python.org/moin/GlobalInterpreterLock
请参阅消除 GIL 部分以了解为什么 python 仍然有 GIL。
由于 GIL 的存在,是否有可能在 python 中实现真正的并行?据我所知,每个线程在执行之前获取 GIL,而其他线程则等待 GIL 被释放。既然是瓶颈,为什么还要 GIL
Python,语言不一定强制GIL。这是语言的不同实现,可能有也可能没有 GIL。
CPython(事实上的实现)有 GIL。所以你在使用它时不能拥有真正的并行线程。但是,您可以使用多处理来获得并行性。 PyPy,该语言的另一种实现现在也有 GIL。
还有 Python 语言的其他实现(例如 Jython 和 IronPython)没有 GIL,您可以使用线程来 运行 并行操作。
Cython 有一个 GIL,但您可以使用 with
语句释放它。
提到的项目链接:
有关此主题的更多资源:
关于编程堆栈交换的问题:https://softwareengineering.stackexchange.com/questions/186889/why-was-python-written-with-the-gil(感谢@Rogalski)
Python 维基:https://wiki.python.org/moin/GlobalInterpreterLock
David Beazley 的演讲 - https://www.youtube.com/watch?v=Obt-vMVdM8s
来自 Jeff Knupp 的文章:https://jeffknupp.com/blog/2013/06/30/pythons-hardest-problem-revisited/
如果您想了解 python 中的 GIL,我建议您从这里开始阅读:
https://wiki.python.org/moin/GlobalInterpreterLock
请参阅消除 GIL 部分以了解为什么 python 仍然有 GIL。