Wie starte ich uWSGI neu, wenn ein Python-Skript geändert wird?

38

Ich kann mich nicht erinnern, wo, aber ich habe gelesen, dass sich uWSGI wie ein Django-Entwicklungsserver neu laden kann, wenn ein Projektskript geändert wird. Ich kann das weder in den Dokumenten noch im Internet finden. Wie kann ich das machen?

Ich benutze Ubuntu 12.04 auf meinen Arbeitsmaschinen und Debian Squeeze auf Stage & Production Server, Django 1.4 und uWSGI 1.2.

culebrón
quelle

Antworten:

35

py-autoreload=NIn neueren Versionen gibt es eine Option. Stellen Sie einfach Ndie Häufigkeit (in Sekunden) der Überprüfungen ein (3 ist ein guter Wert).

roberto
quelle
12
"use only in development" laut uwsgi docs
scytale
4
sieht aus wie touch-reload = / some / file ist eine sicherere Option
scytale
10

Wenn Sie das automatische Laden von Django nicht verlieren möchten, registrieren Sie diese Methode zum erneuten Laden (dh in 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()

Wenn Sie jetzt Ihren Code ändern, wird er neu geladen.

Urheber: Simone Federici

BorisHajduk
quelle
1
Das hat einwandfrei funktioniert. Außerdem wurde eine Bedingung hinzugefügt, damit diese nur in der Entwicklungsumgebung aufgerufen wird.
2.
0

uwsgi erlaubt auch einen Neustart mit kill SIGNAL. Ich benutze es wie folgt:

# 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

Wenn Sie denselben Befehl ausführen, werden die untergeordneten Procs-PIDs geändert, sobald sie vom Master erneut erzeugt werden. Überprüfen Sie auch die uwsgi-Konfiguration auf die Anzahl der Master- / Worker-Prozesse. Diese Methode lässt sich leicht in ansible oder andere Automatisierungstools integrieren und ist daher für die Remote-Verwendung einfach.

Hierfür muss Ihr Original-Proc nicht mit --touch-reload gestartet werden.

mrtipale
quelle