由于 GIL 是围绕解释器的锁,它会影响编译后的 Python 吗?我想知道是否可以通过在执行之前简单地编译我的 python 来克服 cpython 固有的多线程限制。
希望这是有道理的,我不会遗漏一些明显的东西或误解 GIL 如何工作/影响执行。
谢谢
由于 GIL 是围绕解释器的锁,它会影响编译后的 Python 吗?我想知道是否可以通过在执行之前简单地编译我的 python 来克服 cpython 固有的多线程限制。
希望这是有道理的,我不会遗漏一些明显的东西或误解 GIL 如何工作/影响执行。
谢谢
正如丹尼尔在评论中所说,这取决于你如何“编译”代码。
例如,使用 Jython 运行代码确实绕过了 GIL 施加的限制。
另一方面,使用 py2exe 之类的东西没有任何区别,因为这实际上只是将 CPython 与您的代码一起打包。
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/