gue*_*tli 11 python django mod-wsgi inotify
到目前为止,我按照这个建议重新加载代码:
https://code.google.com/archive/p/modwsgi/wikis/ReloadingSourceCode.wiki
这具有缺点,即每N秒仅检测到代码变化.我可以使用N = 0.1,但这会导致无用的磁盘IO.
AFAIK可以通过python获得linux内核的inotify回调.
是否有更快的方法来检测代码更改并重新启动wsgi处理程序?
我们在linux上使用守护进程模式.
有兴趣为什么我想要这个.这是我的设置:
大多数人使用" manage.py runserver"进行开发,并使用其他一些wsgi部署进行生产.
在我的背景下,我们自动创建了新系统,产品和开发系统大多相同.
一个操作系统(linux)可以托管N个系统(虚拟环境).
开发人员可以使用runserver或mod_wsgi.使用runserver有一个好处,它易于调试,mod_wsgi具有不需要首先启动服务器的好处.
mod_wsgi有一个好处,你知道URL: https://dev-server/system-name/myurl/
使用runserver,您不知道端口.使用案例:您想要从内部维基链接到开发系统....
我们过去使用过mod_wsgi的代码重新加载的脏黑客攻击:maximum-requests=1但这很慢.
您可以使用 inotify hooktables根据 i-notify 信号运行任何您想要的命令(这是我的源链接: http://terokarvinen.com/2016/when-files-change-take-action-inotify-hookable)。
查看表格后,您可以重新加载 apache 的代码。
对于您的具体问题,它应该是这样的:
inotify-hookable --watch-directories sources/ --recursive --on-modify-command './code_reload.sh'
Run Code Online (Sandbox Code Playgroud)
在前面的链接中,执行的命令只是一个简单的touch flask/init.wsgi
所以,整个代码(添加忽略的文件是):
inotify-hookable --watch-directories flask/ --recursive --ignore-paths='flask/init.wsgi' --on-modify-command 'touch flask/init.wsgi'
Run Code Online (Sandbox Code Playgroud)
如此处所述:Flask + mod_wsgi 源代码更改时自动重新加载,如果您已启用WSGIScriptReloading,则只需触摸该文件即可。它将导致整个代码重新加载(不仅仅是配置文件)。但是,如果您愿意,可以设置任何其他脚本来重新加载代码。
经过一番谷歌搜索后,这似乎是该问题的一个非常标准的解决方案,我认为您可以将它用于您的应用程序。