我正在将Django与Gunicorn结合使用。由于我对Gunicorn的内部知识了解不多,所以我想知道WSGI应用程序对象的寿命是多少。它是永久的,还是为每个请求而创建的,或者只要工人活着就可以活下去?
类似地,在uWSGI中,似乎根据this调用了可为一个请求调用的应用程序。因此,这是否意味着应用程序对象存在一段时间(并且uWSGI为每个请求调用相同的对象)?
这可能很愚蠢,但我试图在应用程序级缓存某些内容(比如在某些全局或文件级变量中)时避免出现这种情况,以避免缓存(Redis / Memcached)或数据库调用。我想知道应用程序对象是否至少生存了一段时间,那么以固定的间隔缓存数据而不发出缓存请求(毕竟是N / W请求)也可能是一件好事。
[请帮助我理解这一点。
[您似乎缺少一些重要的区别-WSGI是PEP-333(3)所规定的协议名称,gunicorn
/ uwsgi
是该协议的实现。
WSGI应用程序对象的生存期是多少。它是永久的,还是为每个请求而创建的,或者只要工人活着就可以活下去?
Django具有wsgi.py
文件,该文件公开了名为application
的WSGI应用程序对象,所有USGI服务器都使用该文件(您需要传递此可调用对象的位置)。基本标准是应用程序对象需要采用两个参数:
应用程序通过从环境中生成请求和其他必要的元数据来包装下面各层的所有内容,并且在发送响应时,它会调用状态代码和标头提供的callable。然后响应主体变为可迭代的。
如您所见,WSGI服务器可以在启动时获取应用程序对象,并且可以在服务器进程的整个生命周期中,每次请求获得响应时都调用该对象。我主要使用uwsgi
,所以我可以告诉uwsgi
(大概是其他人)确实做到了。
为了给您更多的上下文,uwsgi
具有主进程的概念,该主进程启动工作进程并在每个进程内生成工作线程。如果不完全相同,gunicorn
(和其他)可能具有相似的概念。