在HUP信号后,gunicorn不能完全重新加载

我试图得到一个工作主pipe/ gunicorn / djangostream浪汉设置。 我正在使用python-watchdog在发生代码更改时尝试重新启动gunicorn。

我正在使用gunicorn的以下pipe理员configuration:

[program:someapp] environment=PYTHONPATH='/vagrant/libs/unmodified/django-error-capture-middleware/src:/vagrant:/home/vagrant/.virtualenvs/someapp/lib/python2.7/site-packages:/vagrant/wsgi',DJANGO_SETTINGS_MODULE=someapp.settings.vagrant command=/home/vagrant/.virtualenvs/someapp/bin/gunicorn --bind 0.0.0.0:80 --pid=/home/vagrant/.gunicorn.pid --preload --workers=1 --debug --log-level debug --error-logfile - --access-logfile - vagrant_wsgi:application user=root group=root redirect_stderr=true stdout_logfile = /vagrant/logs/gunicorn.log stderr_logfile = /vagrant/logs/gunicorn.log stdout_logfile_maxbytes=0 autostart=true autorestart=true stdout_events_enabled=true loglevel=debug 

这一切工作得很好。 看门狗也工作正常。 但是,当我使用看门狗运行一个kill -HUP [pidofgunicorn] ,有时它不会实际上完全重新加载。 有时候django甚至会报告,当模块在之前的时候就会丢失(我根本没有修改过sys.path)。

如果我使用看门狗运行supervisorctl restart someapp ,它工作正常。 但是,这需要更长的时间,特别是在virtualbox实例上。

有什么我可以做得到gunicorn优雅重新加载,实际上看到所作的变化?

问题是–preload参数。

一个解决scheme是不使用–preload。

第二个解决scheme是遵循这个:

 # Reload a new master with new workers kill -s USR2 $PID # Graceful stop old workers kill -s WINCH $OLDPID # Graceful stop old master kill -s QUIT $OLDPID 

第三种解决scheme是使用包含https://github.com/flupke/rainbow-saddle的软件 ,与supervisord很好地协作。