我也遇到了这个问题的变体——正如 Pokomy 先生链接的文章中所建议的那样,用HUP
信号杀死 gunicorn 主进程似乎可以解决问题。
watchdog
如果您使用 python模块,可以轻松设置文件保存时自动重新加载;设置实际上是不言自明的,所以这是我的开发 supervisord.conf 文件中的一个片段:
[program:ost2]
autostart=true
command=/usr/local/share/python/gunicorn --debug\
-c /Users/fish/Dropbox/ost2/ost2/utils/gunicorn/ost2-debug.py wsgi_debug
directory=/Users/fish/Dropbox/ost2/ost2
priority=500
; (etc)
[program:ost2-reloader]
autostart=true
autorestart=false
directory=/tmp
command=/usr/local/share/python/watchmedo shell-command\
--patterns="*.py;*.txt;*.html;*.css;*.less;*.js;*.coffee"\
-R --command='kill -HUP $(cat /usr/local/gunicorn/gunicorn.pid)'\
/Users/fish/Dropbox/ost2/ost2/
priority=996
; (etc)
(注意,我将斜杠放在该示例中实际上不在 conf 文件中的换行符之前——为了便于阅读,我插入了这些换行符;我不确定这是否适用于 IRL)
第一个程序是 gunicorn 进程,我在开发过程中在单线程中运行,以便使用 Werkzeug 调试器。第二部分是有趣的一点:该命令说,“如果文件的后缀与此列表中的后缀匹配,则只要此目录树中的文件发生更改,就终止 gunicorn PID 文件指定的进程”。
对包括我在内的许多人来说都是一种魅力。如果您不知道,它watchdog
本身就非常有用并且值得一看。