我在init中有一个变量,它从数据库加载并需要大约15秒。用django和mod_wsgi为每个请求重新加载Python模块
对于Django的开发服务器,一切正常,但看起来像apache2和mod_wsgi该模块加载每个请求(花费15秒)。
有关此行为的任何想法?
更新:我已经在mod wsgi中启用守护进程模式,看起来像它现在不重装模块!需要更多的测试,我会更新。
我在init中有一个变量,它从数据库加载并需要大约15秒。用django和mod_wsgi为每个请求重新加载Python模块
对于Django的开发服务器,一切正常,但看起来像apache2和mod_wsgi该模块加载每个请求(花费15秒)。
有关此行为的任何想法?
更新:我已经在mod wsgi中启用守护进程模式,看起来像它现在不重装模块!需要更多的测试,我会更新。
您可能会忽略这样一个事实,即在mod_wsgi或mod_python的嵌入模式下,应用程序是多进程的。因此,请求可能会发生在不同的进程中,并且遇到第一次未遇到的进程时,您将看到延迟。在mod_wsgi守护进程模式下,默认只有一个进程。或者像其他人提到的你MaxRequestsPerChild设置为1,这是一个非常糟糕的主意。
我明白了你的观点,但在守护进程模式下MaxRequestsPerChild的设置为1是什么? – Vishal 2010-06-13 20:36:12
MaxRequestsPerChild与守护进程模式无关,它会影响Apache服务器子进程。在单个请求之后回收Apache服务器子进程非常无效,并且会影响服务器性能。更重要的是,如果您使用mod_python或mod_wsgi嵌入模式在嵌入式模式下运行Python代码。由于Apache服务器子进程清理和回收的发生,性能可能会比CGI差。 – 2010-06-14 04:40:43
感谢您的解释... – Vishal 2010-06-15 16:11:21
我想你的Apache设置中MaxClients/MaxRequestsPerChild和/或ThreadsPerChild的值为1。所以Apache必须为每个mod_python调用启动Django。这就是为什么花了这么长时间。如果你有一个wsgi守护进程,那么只有当你“触摸”wsgi脚本时,重启才会发生。
请提供您的apache mod_wsgi配置。 – nosklo 2010-06-11 19:08:44
你怎么知道这个? – 2010-06-11 19:11:22
@Ignacio通过查看日志 – Vishal 2010-06-11 19:51:29