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

Warmup django application during uwsgi chain-raload

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

有什么方法可以预热带有uwsgi 配置的django 应用程序以减少等待时间吗?

引用文章中,有专门推荐Django等应用:http://uwsgi-docs.readthedocs.io/en/latest/articles/TheArtOfGracefulReloading.html#dealing-with-ultra-lazy-apps-like-django

在我的一些项目中,有一个 /warmup/ URL 可以加载所有可以预先加载的内容。 uWSGI确实只在整个wsgi.py项目运行之后才向worker发送客户端请求,所以我们在uWSGI尝试服务之前做了一个假调用/warmup/ url任何真实的客户请求:

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