使用Django和mod_wsgi时,Python模块为何每次请求都被重新加载
我在一个模块的init里有一个变量,它是从数据库加载的,差不多需要15秒钟。
在django开发服务器上,一切都运行得很好,但在apache2和mod_wsgi下,似乎每次请求都会重新加载这个模块(又要花15秒)。
有人知道这是为什么吗?
更新:我在mod_wsgi中启用了守护进程模式,现在看起来模块不再重新加载了!还需要更多测试,我会再更新的。
2 个回答
1
我想,你在Apache设置中把MaxClients、MaxRequestsPerChild和/或ThreadsPerChild的值都设成了1。这就导致每次调用mod_python的时候,Apache都得重新启动Django。所以才会花那么长时间。如果你有一个wsgi守护进程,那么只有在你“触碰”一下wsgi脚本的时候,才会重启。
3
你可能忽略了一个事实,那就是在mod_wsgi的嵌入模式或者使用mod_python时,应用程序是多进程的。这意味着请求可能会被分配到不同的进程上,所以当你第一次遇到一个之前没有被访问过的进程时,会出现延迟。在mod_wsgi的守护进程模式下,默认情况下只有一个进程。或者,正如其他人提到的,你可能把MaxRequestsPerChild设置成了1,这其实是个很糟糕的主意。