【问题标题】:Python module being reloaded for each request with django and mod_wsgi使用 django 和 mod_wsgi 为每个请求重新加载 Python 模块
【发布时间】:2010-06-11 18:46:55
【问题描述】:

我在一个模块的 init 中有一个变量,该变量从数据库加载,大约需要 15 秒。

对于 django 开发服务器,一切正常,但看起来像使用 apache2 和 mod_wsgi 时,每个请求都会加载模块(需要 15 秒)。

对此行为有任何想法吗?

更新:我在 mod wsgi 中启用了守护程序模式,看起来它现在没有重新加载模块!需要更多测试,我会更新。

【问题讨论】:

  • 请提供您的 apache mod_wsgi 配置。

标签: python django apache mod-wsgi


【解决方案1】:

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

【讨论】:

  • 我明白你的意思,但是在守护程序模式下 MaxRequestsPerChild 设置为 1 是什么意思?
  • MaxRequestsPerChild 与守护程序模式无关,它会影响 Apache 服务器子进程。在单个请求之后回收 Apache 服务器子进程非常低效,并且会影响服务器性能。如果您使用 mod_python 或 mod_wsgi 嵌入模式以嵌入模式运行 Python 代码,则更是如此。由于 Apache 服务器子进程清理和回收的方式,性能可能会比 CGI 差。
【解决方案2】:

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

【讨论】:

    猜你喜欢
    • 2015-06-01
    • 2010-10-20
    • 2020-09-09
    • 1970-01-01
    • 2016-10-25
    • 1970-01-01
    • 2010-11-08
    • 1970-01-01
    • 2014-09-12
    相关资源
    最近更新 更多