【问题标题】:Does running separate python processes avoid the GIL?运行单独的 python 进程是否避免了 GIL?
【发布时间】:2010-11-02 18:58:21
【问题描述】:

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

【问题讨论】:

    标签: python


    【解决方案1】:

    GIL 仅影响单个进程中的线程。 multiprocessing 模块实际上是 threading 的替代品,它允许 Python 程序使用多个内核 &c。您的方案也很容易允许使用多个内核。

    【讨论】:

    • Python 应用程序的“Plain Old Unix Pipeline”通常是比多线程更好的设计。流程管道避免了所有 GIL 问题。它还避免了您碰巧使用的任何库中的任何潜在线程安全问题。使用 shell 很容易创建。操作系统为您处理同步——您只需从 sys.stdin 读取并写入 sys.stdout。
    【解决方案2】:

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

    【讨论】:

    猜你喜欢
    • 2011-11-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-11-08
    • 1970-01-01
    • 2018-10-05
    • 2014-12-06
    相关资源
    最近更新 更多