在uwsgi chain-raload期间的热身django应用程序

时间:2017-01-29 21:31:01

标签: python django reload uwsgi

我正在使用uwsgi + django并尝试进行最快的重装。我已配置链重新加载(http://uwsgi-docs.readthedocs.io/en/latest/articles/TheArtOfGracefulReloading.html#chain-reloading-lazy-apps),但在工作人员重新加载后提供第一个请求时仍有几秒的延迟。

有没有办法用uwsgi配置来预热django应用程序以减少等待时间?

1 个答案:

答案 0 :(得分:2)

在引用的文章中,对Django及其他应用提出了特别建议:http://uwsgi-docs.readthedocs.io/en/latest/articles/TheArtOfGracefulReloading.html#dealing-with-ultra-lazy-apps-like-django

在我的一些项目中,有一个/warmup/ URL可以加载可以预先加载的所有内容。只有在项目的整个wsgi.py运行后,uWSGI才会向工作人员发出客户请求,因此我们会在uWSGI尝试提供任何真实的客户端请求之前对/warmup/网址进行虚假调用:

# /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的情况下才会进行预热。否则它会很好地预热。