我正在这里阅读: https://code.google.com/p/modwsgi/wiki/ReloadingSourceCode
我们有一个 python 应用程序托管在大量负载平衡服务器上,有时请求需要很长时间才能到达负载平衡器中优先级较低的服务器。这意味着在部署后很长一段时间内,我们可能会等待很长时间(直到该服务器的 wsgi 守护程序启动)。
当我们实际部署时,我对此进行了修复,但我们在服务器阵列上也有自动 apache(优雅)重启。重启 apache 和触碰我的 wsgi 文件是一回事吗?wsgi 是否等到请求进入该特定守护进程后才进行编译和启动,还是在 apache 重启时自动加载?
答案1
使用预加载在进程启动时强制加载应用程序,而不是依赖应用程序第一次请求时的默认延迟加载。
如果使用足够新的 mod_wsgi 版本,而不是使用:
WSGIDaemonProcess xxx
WSGIProcessGroup xxx
WSGIApplicationGroup %{GLOBAL}
WSGIScriptAlias / /some/path/wsgi.py
使用:
WSGIDaemonProcess xxx
WSGIScriptAlias / /some/path/wsgi.py process-group=xxx application-group=%{GLOBAL}
通过向 WSGIScriptAlias 提供进程组和应用程序组参数,mod_wsgi 将确切地知道应用程序最终将运行哪个守护进程组和子解释器上下文,因此它可以在启动时预加载它。
如果您使用的是带有旧版本 mod_wsgi 的非常过时的发行版,那么可以使用 WSGIImportScript 指令来执行类似操作。