我正在为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命令。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top