运行单独的Python进程能够避免GIL吗?

23

我对Python中的全局解释器锁(GIL)如何实际工作很感兴趣。如果我有一个C++应用程序启动四个单独的Python脚本实例,它们会在不同的核上并行运行,还是GIL甚至比启动它的单个进程更深地控制所有Python进程,而不考虑生成它的进程?

2个回答

35

GIL(全局解释器锁)仅影响单个进程内的线程。实际上,multiprocessing模块是threading的替代品,它允许Python程序使用多个核心等。您的场景也可以轻松地使用多个核心。


5
在设计上,一个由Python应用程序构成的“普通Unix管道”通常比多线程更好。 管道中的进程避免了所有GIL问题。它还避免了您使用的任何库可能存在的潜在线程安全问题。使用shell很容易创建这样的管道。操作系统会为您处理同步 - 您只需要从sys.stdin读取并写入sys.stdout即可。 - S.Lott
@S.Lott这是否涉及从Python应用程序中调用subprocess运行脚本? - Charlie G

3
正如Alex Martelli所指出的那样,您确实可以通过运行多个进程来避免GIL,我只想补充并指出,GIL是实现(CPython)的限制,而不是Python的一般限制,可以实现没有这种限制的Python。 Stackless Python就是一个例子。

2
这是关于Stackless的一个常见误解。Stackless不能帮助利用多个核心。请参阅http://www.stackless.com/pipermail/stackless/2007-August/001963.html。 - Jay Taylor

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接