Python 3.1中的GIL

Dew*_*wfy 16 python multithreading gil

有没有人知道Python 3.1中针对C++多线程集成的Global Interpreter Lock的命运

Ale*_*lli 25

GIL仍然存在于CPython 3.1中; 在空载燕子项目目标(其中包括许多其他的性能提升),最终将其删除,但它仍然从它的目标的方式,并正在2.6先用最终移植到3.x的任何X的意图将是当前2.y版本的时间被认为是完成的.目前,多处理(而不是线程)仍然是在CPython中使用多个内核的首选方式(IronPython和Jython也很好,但它们目前不支持Python 3,也不能使C++集成变得那么容易; - ).

  • 只要Python中的所有入口点都使用适当的宏来允许自由线程化,您的C++应用程序就不会受到GIL的影响 - 只有Python自己的执行才会被序列化(在I/O和c期间GIL无论如何都会被丢弃).Ironclad,http://www.resolversystems.com/documentation/index.php/Ironclad.html,提供了一些(不完整的)帮助w/IronPython < - > C/C++接口,但"multiplatform"不是.NET的强项此时; 我知道Jython没有类似的助手. (10认同)

Mat*_*ner 17

Python 3.2的GIL将发生重大变化.看一下Python 3.2的新功能,以及在邮件列表中启动它的线程.

虽然这些变化并不意味着GIL的结束,但它们预示着可能会带来巨大的性能提升.

Update0

  • Antoine Pitrou在3.2中使用新GIL的总体性能提升可以忽略不计,而是专注于改善某些极端情况下出现的争用问题.
  • 一个令人钦佩的努力,由大卫比兹利是为了实现一个调度器显著提高性能时,CPU和IO绑定线程混合,这是不幸击落.
  • Unladen Swallow工作被提议用于 Python 3.3中的合并,但由于该项目缺乏结果,因此已被撤销.PyPy现在是首选项目,目前正在申请资助以添加Python3k支持.目前PyPy成为违约的可能性很小.

在过去的15年里,我们已经努力从CPython中删除GIL,但在可预见的未来,它仍然存在.


Dav*_*eau 9

GIL不会影响不使用python对象的代码.在Numpy中,我们发布计算代码的GIL(线性代数调用等),底层代码可以自由使用多线程(事实上,那些通常是第三方库,它们对python一无所知)