运行单独的python进程是否避免了GIL?

wha*_*hat 16 python

我很好奇python中的Global Interpreter Lock实际上是如何工作的.如果我有一个c ++应用程序启动python脚本的四个单独实例将在不同的内核上并行运行,或者GIL是否更深入,然后只是启动的单个进程并控制所有python进程,无论生成它的进程如何?

Ale*_*lli 28

GIL仅影响单个进程中的线程.multiprocessing事实上,该模块是threadingPython程序使用多个核心的替代方案.您的方案也很容易允许使用多个核心.

  • Python应用程序的"普通旧Unix管道"通常比多线程更好的设计.流程管道可以避免所有GIL问题.它还可以避免您碰巧使用的任何库中的任何潜在的线程安全问题.使用shell创建很容易.操作系统为您处理同步 - 您只需从sys.stdin读取并写入sys.stdout. (3认同)

小智 5

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

  • 这是对 Stackless 的一个常见误解。Stackless 无助于利用多核。请参阅http://www.stackless.com/pipermail/stackless/2007-August/001963.html (2认同)