web-dev-qa-db-fra.com

Comment puis-je faire redémarrer uWSGI lorsqu'un script Python est modifié?

Je ne me souviens pas où, mais j'ai lu que uWSGI peut se recharger comme Django serveur de développement lorsqu'un script de projet est modifié. Je ne le trouve pas dans les docs , ni dans les internets. Comment faire?

J'utilise Ubuntu 12.04 sur mes machines de travail et Debian Squeeze sur scène et serveur de production, Django 1.4 et uWSGI 1.2.

39
culebrón

Référence: http://projects.unbit.it/uwsgi/wiki/Management

Si vous avez démarré uwsgi avec le --touch-reload=/path/to/special/file/usually/the.ini option, recharger votre uWSGI est une simple question de recharger ce fichier avec

touch /path/to/special/file/usually/the.ini

Et si vous voulez la capacité de "chargement automatique", voici l'astuce qui permet de le faire: http://projects.unbit.it/uwsgi/wiki/TipsAndTricks#uWSGIdjangoautoreloadmode

39
Calvin Cheng

Il y a un py-autoreload=N option dans les versions les plus récentes. Réglez simplement N sur la fréquence (en secondes) des vérifications (3 est une bonne valeur).

38
roberto

Si vous ne voulez pas perdre le Django autoreload, enregistrez cette méthode de rechargement (c'est-à-dire: dans 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()

Maintenant, si vous changez votre code, il sera rechargé.

Auteur: Simone Federici

10
BorisHajduk

uwsgi permet également de redémarrer en utilisant kill SIGNAL. Je l'utilise comme ci-dessous:

# 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 vous exécutez la même commande, vous verrez que les procs enfants pid seront modifiés à mesure qu'ils sont régénérés par le maître. Vérifiez également la configuration uwsgi pour les nombres de proc de maître/travailleur. Cette méthode est facile à intégrer avec ansible ou d'autres outils d'automatisation, donc facile à utiliser à distance.

Cela ne nécessite pas que votre proc d'origine soit démarré avec --touch-reload.

0
mrtipale