如何使用Flask + uWSGI设置自动重装?
题
我正在为Flask寻找类似 uWSGI + Django自动重载模式的东西。
解决方案
您可以尝试使用超级用户作为Uwsgi应用程序的管理员。它还具有监视功能,当“触摸” /修改了文件或文件夹时,该功能会自动重新加载进程。
您将在此处找到一个不错的教程: Flask+ NginX + Uwsgi + Supervisord
其他提示
我正在运行uwsgi 1.9.5版本和该选项 通用标签
效果很好
如果要使用命令参数配置uwsgi
,请传递--py-autoreload=1
:
通用标签
如果您使用.ini
文件配置uwsgi
并使用uwsgi --ini
,则将以下内容添加到.ini
文件中:
通用标签
对于开发环境,您可以尝试使用 --python-autoreload uwsgi的参数。 查看源代码,它可能仅在线程模式(--enable-threads)下工作。
开发模式Flask的自动重载功能实际上是由基础的Werkzeug库提供的。相关代码在werkzeug/serving.py
中-值得一看。但基本上,主应用程序将WSGI服务器作为子进程生成,该子进程每秒对每个活动的.py
文件进行一次统计,以查找更改。如果发现任何错误,子进程将退出,父进程将再次启动它进行备份-实际上是重新加载了更改。
没有理由不能在uWSGI层上实现类似的技术。如果您不想使用stat循环,则可以尝试使用基础OS文件监视命令。显然(根据Werkzeug的代码), pyinotify 是有问题的,但看门狗有效吗?尝试一些事情,看看会发生什么。
编辑:
针对此评论,我认为这很容易重新实现。基于您的链接提供的示例以及werkzeug/serving.py
的代码:
通用标签
未经测试,但可以正常工作。
(您可以使用任意WSGI服务器)
恐怕Flask实在是太空洞了,默认情况下捆绑了这样的实现。
在生产环境中动态地重载代码通常是一件坏事,但是如果您担心开发环境,请查看此bash shell脚本 http://aplawrence.com/Unixart/watchdir.html
只需将睡眠间隔更改为适合您需要的时间,然后用echo命令替换您用来重新加载uwsgi的内容即可。我在主模式下运行uwsgi,然后发送killall uwsgi命令。