2017-01-29 2 views
2

J'utilise uwsgi + django et j'essaie de faire le rechargement le plus rapide. J'ai configuré le rechargement de chaîne (http://uwsgi-docs.readthedocs.io/en/latest/articles/TheArtOfGracefulReloading.html#chain-reloading-lazy-apps), mais il reste quelques secondes de latence lors de la première requête après le rechargement du travail.Warmup django application pendant uwsgi chain-raload

Y at-il un moyen de réchauffer l'application django avec la configuration uwsgi pour réduire le temps d'attente?

Répondre

0

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.