我有一个 django 应用程序,它严重依赖于线程,无论我添加多少进程或线程到WSGIDaemonProcess
.
我在那里找不到是/否的答案,我想知道。会不会是 mod_wsgi 对每个请求都使用相同的解释器,所以由于 GIL 限制,我在瓶颈中运行?
如果是这样,您会推荐其他可以帮助我解决此限制的方法吗?
我有一个 django 应用程序,它严重依赖于线程,无论我添加多少进程或线程到WSGIDaemonProcess
.
我在那里找不到是/否的答案,我想知道。会不会是 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,所以我们真的需要更多细节来理解你想要做什么......