2010-06-11 72 views
1

我在init中有一个变量,它从数据库加载并需要大约15秒。用django和mod_wsgi为每个请求重新加载Python模块

对于Django的开发服务器,一切正常,但看起来像apache2和mod_wsgi该模块加载每个请求(花费15秒)。

有关此行为的任何想法?

更新:我已经在mod wsgi中启用守护进程模式,看起来像它现在不重装模块!需要更多的测试,我会更新。

+1

请提供您的apache mod_wsgi配置。 – nosklo 2010-06-11 19:08:44

+0

你怎么知道这个? – 2010-06-11 19:11:22

+0

@Ignacio通过查看日志 – Vishal 2010-06-11 19:51:29

回答

3

您可能会忽略这样一个事实,即在mod_wsgi或mod_python的嵌入模式下,应用程序是多进程的。因此,请求可能会发生在不同的进程中,并且遇到第一次未遇到的进程时,您将看到延迟。在mod_wsgi守护进程模式下,默认只有一个进程。或者像其他人提到的你MaxRequestsPerChild设置为1,这是一个非常糟糕的主意。

+0

我明白了你的观点,但在守护进程模式下MaxRequestsPerChild的设置为1是什么? – Vishal 2010-06-13 20:36:12

+0

MaxRequestsPerChild与守护进程模式无关,它会影响Apache服务器子进程。在单个请求之后回收Apache服务器子进程非常无效,并且会影响服务器性能。更重要的是,如果您使用mod_python或mod_wsgi嵌入模式在嵌入式模式下运行Python代码。由于Apache服务器子进程清理和回收的发生,性能可能会比CGI差。 – 2010-06-14 04:40:43

+0

感谢您的解释... – Vishal 2010-06-15 16:11:21

1

我想你的Apache设置中MaxClients/MaxRequestsPerChild和/或ThreadsPerChild的值为1。所以Apache必须为每个mod_python调用启动Django。这就是为什么花了这么长时间。如果你有一个wsgi守护进程,那么只有当你“触摸”wsgi脚本时,重启才会发生。