Как Django гарантирует, что __init__ промежуточного программного обеспечения будет вызываться только один раз?

Документация Джанго:

В отличие от методов process_*, которые вызываются один раз для каждого запроса, __init__ вызывается только один раз, когда веб-сервер отвечает на первый запрос.

Как Django гарантирует, что объект промежуточного программного обеспечения инициализируется только один раз? Веб-сервер может запускать несколько экземпляров интерпретатора Python для обработки запросов, верно?


person NeoWang    schedule 23.07.2015    source источник
comment
Я предполагаю, что это означает один раз для каждого экземпляра интерпретатора.   -  person DanielB    schedule 23.07.2015


Ответы (1)


Это означает один раз для каждого экземпляра интерпретатора. Обратите внимание на реализацию:

class WSGIHandler(base.BaseHandler):
  # ...
  def __call__(self, environ, start_response):
    # ...
    if self._request_middleware is None:
        self.load_middleware()

Вы можете прочитать django/core/handlers/wsgi.py и django/core/handlers/base.py (особенно Basehandler.load_middleware) для получения более подробной информации.

person DanielB    schedule 23.07.2015