1

由于 GIL 是围绕解释器的锁,它会影响编译后的 Python 吗?我想知道是否可以通过在执行之前简单地编译我的 python 来克服 cpython 固有的多线程限制。

希望这是有道理的,我不会遗漏一些明显的东西或误解 GIL 如何工作/影响执行。

谢谢

4

2 回答 2

2

正如丹尼尔在评论中所说,这取决于你如何“编译”代码。

例如,使用 Jython 运行代码确实绕过了 GIL 施加的限制。

另一方面,使用 py2exe 之类的东西没有任何区别,因为这实际上只是将 CPython 与您的代码一起打包。

于 2014-02-11T20:53:30.953 回答
1

Jython 没有 GIL。

IronPython 没有 GIL。

您可以使用 cython 编译您的 python 代码,然后取决于它是否使用 GIL。如果您将所有 python 变量转换为 cython 类型,您可以在一个with nogil块中运行您的代码并且您将没有 GIL,因为您明确发布了 GIL。如果你没有在 nogil 块中运行,你会受到 cpython 的 GIL 的影响。更多在 cython 文档中:http ://docs.cython.org/src/userguide/external_C_code.html#acquiring-and-releasing-the-gil

有关 python 和 GIL 的更多信息,请在此处阅读:http: //www.jeffknupp.com/blog/2013/06/30/pythons-hardest-problem-revisited/

于 2014-02-11T21:06:59.903 回答