【发布时间】:2012-09-27 17:00:23
【问题描述】:
我有一个严重依赖线程的 django 应用程序,我注意到无论我向WSGIDaemonProcess 添加多少进程或线程,性能都没有提升。
我找不到是/否的答案,我想知道。会不会是 mod_wsgi 对每个请求都使用相同的解释器,所以由于 GIL 限制而导致我在瓶颈中运行?
如果是这样,您会推荐其他可以帮助我解决此限制的方法吗?
【问题讨论】:
标签: multithreading mod-wsgi gil
我有一个严重依赖线程的 django 应用程序,我注意到无论我向WSGIDaemonProcess 添加多少进程或线程,性能都没有提升。
我找不到是/否的答案,我想知道。会不会是 mod_wsgi 对每个请求都使用相同的解释器,所以由于 GIL 限制而导致我在瓶颈中运行?
如果是这样,您会推荐其他可以帮助我解决此限制的方法吗?
【问题讨论】:
标签: multithreading mod-wsgi gil
对于典型配置,是的,所有请求都将在同一个子解释器中处理。
如果在同一进程的不同子解释器中,你仍然会受到 GIL 的影响。
发布您的实际 mod_wsgi 配置以确认您已正确设置。
考虑尝试 New Relic 找出真正的瓶颈所在。
观看我在 PyCon US 2012 上关于寻找瓶颈的演讲
【讨论】:
简答:
没有。
长答案:
这种充分利用处理器以外的能力,即使在使用多线程时,Apache 使用多个进程来处理请求,而不仅仅是一个进程,这一事实进一步增强了这种能力。因此,即使在特定进程中存在对 GIL 的争用,它也不会阻止其他进程能够运行,因为 GIL 仅对一个进程来说是本地的,并且不会跨进程扩展。
引用:https://code.google.com/p/modwsgi/wiki/ProcessesAndThreading
您没有为任何人提供足够的信息来推荐如何提高性能,但如果您实际上已经用 Python 编写了一个线程繁重的程序,那么这是您的第一个错误。 与其在 CPython 上运行程序,不如尝试 Jython 或 IronPython。但是它不适用于 mod_wsgi,所以我们真的需要更多细节来了解你想要做什么......
【讨论】: