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.

Antworten:




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


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.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.