【问题标题】:Does mod_wsgi runs in a single python interpreter?mod_wsgi 是否在单个 python 解释器中运行?
【发布时间】:2012-09-27 17:00:23
【问题描述】:

我有一个严重依赖线程的 django 应用程序,我注意到无论我向WSGIDaemonProcess 添加多少进程或线程,性能都没有提升。

我找不到是/否的答案,我想知道。会不会是 mod_wsgi 对每个请求都使用相同的解释器,所以由于 GIL 限制而导致我在瓶颈中运行?

如果是这样,您会推荐其他可以帮助我解决此限制的方法吗?

【问题讨论】:

    标签: multithreading mod-wsgi gil


    【解决方案1】:

    对于典型配置,是的,所有请求都将在同一个子解释器中处理。

    如果在同一进程的不同子解释器中,你仍然会受到 GIL 的影响。

    发布您的实际 mod_wsgi 配置以确认您已正确设置。

    考虑尝试 New Relic 找出真正的瓶颈所在。

    观看我在 PyCon US 2012 上关于寻找瓶颈的演讲

    【讨论】:

    • 这是否意味着如果您有一个虚拟环境 mod_wsgi 不会使用那里的 python 解释器,而是使用 OS 一级?我知道您允许从 mod_wsgi 搜索站点包,但我不知道当我执行 Web 请求时该进程正在使用哪个物理可执行文件。谢谢。
    • 创建 Python 虚拟环境时,它实际上是创建虚拟环境所针对的任何 Python 安装前面的一层。使用虚拟环境,您仍然使用原始 Python 安装中的 Python 可执行文件,但它在哪里寻找东西有点不同,它将使用虚拟环境中的东西。在 mod_wsgi 的情况下,实际上是使用 Python 共享库而不是可执行文件,但同样的处理。如果您有问题,请创建一个单独的问题,而不是跟进旧问题。
    【解决方案2】:

    简答:

    没有。

    长答案:

    这种充分利用处理器以外的能力,即使在使用多线程时,Apache 使用多个进程来处理请求,而不仅仅是一个进程,这一事实进一步增强了这种能力。因此,即使在特定进程中存在对 GIL 的争用,它也不会阻止其他进程能够运行,因为 GIL 仅对一个进程来说是本地的,并且不会跨进程扩展。

    引用:https://code.google.com/p/modwsgi/wiki/ProcessesAndThreading

    您没有为任何人提供足够的信息来推荐如何提高性能,但如果您实际上已经用 Python 编写了一个线程繁重的程序,那么这是您的第一个错误。 与其在 CPython 上运行程序,不如尝试 Jython 或 IronPython。但是它不适用于 mod_wsgi,所以我们真的需要更多细节来了解你想要做什么......

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-01-22
      • 2011-10-27
      • 2012-05-01
      • 2022-01-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多