¿Cómo hago para que se reinicie uWSGI cuando se modifica un script de Python?

38

No recuerdo dónde, pero leí que uWSGI puede recargarse como el servidor de desarrollo Django cuando se modifica un script de proyecto. No puedo encontrar eso en los documentos , ni en Internet. ¿Cómo puedo hacer esto?

Uso Ubuntu 12.04 en mis máquinas de trabajo y Debian Squeeze en el escenario y el servidor de producción, Django 1.4 y uWSGI 1.2.

culebrón
fuente

Respuestas:

35

Hay una py-autoreload=Nopción en las versiones más recientes. Simplemente configure Nla frecuencia (en segundos) de las comprobaciones (3 es un buen valor).

roberto
fuente
12
"usar solo en desarrollo" según documentos de uwsgi
scytale
44
parece que la recarga táctil = / some / file es una opción más segura
scytale
10

Si no desea perder la recarga automática de django, registre este método de recarga (es decir, en 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()

Ahora, si cambia su código, se volverá a cargar.

Autor: Simone Federici

BorisHajduk
fuente
1
Esto funcionó perfectamente. También se agregó un condicional para que esto solo se llame en el entorno de desarrollo.
2upmedia
0

uwsgi también permite reiniciar usando kill SIGNAL. Lo uso de la siguiente manera:

# 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

Si ejecuta el mismo comando, verá que los procs secundarios se cambiarán a medida que master los vuelva a generar. También verifique la configuración de uwsgi para los recuentos de proceso maestro / trabajador. Este método es fácil de integrar con herramientas de automatización ansible u otras, por lo que es fácil de usar para uso remoto.

Esto no necesita que su proceso original se inicie con --touch-reload.

mrtipale
fuente