由于 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/