【问题标题】:True parallelism in PythonPython 中的真正并行性
【发布时间】:2016-07-14 12:46:44
【问题描述】:

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

【问题讨论】:

标签: python multiprocessing gil


【解决方案1】:

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

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

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

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

所提及项目的链接:

有关此主题的更多资源:

【讨论】:

  • 为什么 cpython 决定使用 GIL。 GIL 有什么好处
  • @FaizHalde:网上有数百篇关于这个话题的文章
  • 与 C 代码更好的互操作性。例如,看看众多流行的库——numpy、scipy、pandas——它们都有很大一部分代码是用 C 编写的。
【解决方案2】:

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

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

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

【讨论】:

  • 顺便说一句:您可以通过谷歌搜索“python gil”并单击第一个结果来找到该信息...可能比在 SO 上发布更快...;)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-07-28
  • 2017-11-23
  • 2017-12-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-01-23
相关资源
最近更新 更多