2017-01-29 14 views
2

Я использую uwsgi + django и пытаюсь выполнить самую быструю перезагрузку. Я сконфигурировал перезагрузку сети (http://uwsgi-docs.readthedocs.io/en/latest/articles/TheArtOfGracefulReloading.html#chain-reloading-lazy-apps), но все же есть пара секунд задержки при обслуживании первого запроса после перезагрузки рабочего.Warmup django application во время uwsgi chain-raload

Есть ли способ разогреть приложение django с конфигурацией uwsgi, чтобы сократить время ожидания?

ответ

0

В цитируемой статье, есть специальные рекомендации для Django и поэтому приложения: http://uwsgi-docs.readthedocs.io/en/latest/articles/TheArtOfGracefulReloading.html#dealing-with-ultra-lazy-apps-like-django

На некоторых из моих проектов, есть /warmup/ URL, который загружает все, что может быть загружена заранее. UWSGI действительно дает запросы клиентов работнику только после того, как весь wsgi.py проекта бежал, поэтому мы делаем Ложный вызов на /warmup/ URL ПЕРЕД uWSGI пытался служить любые реальные запросы клиентов:

# /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) 

Пожалуйста, обратите внимание, что если ваш uwsgi.ini настроит lazy-apps=true, тогда загрузка процесса будет инициироваться только на клиентских запросах, поэтому она будет прогреваться только в случае harakiri. В противном случае он будет прогреваться отлично.