修改Python脚本后,如何使uWSGI重新启动?


38

不记得在哪里,但我读到uWSGI可以在修改项目脚本后像Django开发服务器那样重新加载自身。我在docs和互联网中都找不到。我怎样才能做到这一点?

我在工作机上使用Ubuntu 12.04,在舞台和生产服务器,Django 1.4和uWSGI 1.2上使用Debian Squeeze。

Answers:




10

如果您不想丢失Django自动重载,请注册此重载方法(即:在settings.py中):

import uwsgi
from uwsgidecorators import timer
from django.utils import autoreload

@timer(3)
def change_code_gracefull_reload(sig):
    if autoreload.code_changed():
        uwsgi.reload()

现在,如果您更改代码,它将被重新加载。

作者:西蒙妮·费德里奇(Simone Federici)


1
这工作得很好。还添加了条件,因此只能在开发环境中调用。
2upmedia

0

uwsgi还允许使用kill SIGNAL重新启动。我使用它如下:

# ps -efa | grep uwsgi | grep prod
app  13390 13383  0 07:40 ?        00:00:00 /usr/local/bin/uwsgi --ini /etc/uwsgi/apps-enabled/app_prod.ini
app  13417 13390  0 07:40 ?        00:00:00 /usr/local/bin/uwsgi --ini /etc/uwsgi/apps-enabled/app_prod.ini
app  13419 13390  0 07:40 ?        00:00:00 /usr/local/bin/uwsgi --ini /etc/uwsgi/apps-enabled/app_prod.ini
# kill -HUP 13390

如果您运行相同的命令,您将看到child procs pid会随着master重新生成而改变。还要检查uwsgi配置中的主/工作过程计数。此方法易于与ansible或其他自动化工具集成,因此易于远程使用。

不需要使用--touch-reload启动原始程序。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.