Dans l'article cité, il y a une recommandation spéciale pour Django et ainsi d'applications: http://uwsgi-docs.readthedocs.io/en/latest/articles/TheArtOfGracefulReloading.html#dealing-with-ultra-lazy-apps-like-django
Sur certains de mes projets, il y a une URL /warmup/
qui charge tout ce qui peut être chargé dès le départ. Le uwsgi ne donne demandes client au travailleur seulement après l'ensemble wsgi.py
du projet couru, donc nous faisons un faux appel l'url /warmup/
AVANT le uwsgi a essayé de servir toutes les demandes réelles des clients:
# /django-project-root/wsgi.py
import sys
from django.core.wsgi import get_wsgi_application
application = get_wsgi_application()
(...)
# Django warm-up ahead of time instead of lazy
# From: http://uwsgi-docs.readthedocs.org/en/latest/articles/TheArtOfGracefulReloading.html#dealing-with-ultra-lazy-apps-like-django
# And: https://github.com/stefantalpalaru/uwsgi_reload/blob/master/examples/wsgi.py#L19
application({
'REQUEST_METHOD': 'GET',
'SERVER_NAME': '127.0.0.1',
'SERVER_PORT': 80,
'PATH_INFO': '/warmup/',
'wsgi.input': sys.stdin,
}, lambda x, y: None)
S'il vous plaît l'esprit que si votre uwsgi.ini
configure lazy-apps=true
puis la charge de processus se déclenchera uniquement sur les requêtes client, elle ne se réchauffera donc que dans le cas d'un harakiri
. Sinon, il se réchauffera très bien.