2014-04-17 3 views
1

이것은 어리석은 질문이므로 미리 사과드립니다.Django 프레임 워크는 어떻게 뒤에서 작동합니까?

장고 프레임 워크가 실제로 장막 뒤에서 어떻게 작동하는지 이해하려고합니다. 그것은 장고 모든 시간을 실행하지 않고 다음과 같이 uwsgi/gunicorn 또는 요청이 들어 오면 무엇에 의해 호출되어 처리됩니다 내 이해의 :

  1. WsgiHandler 또는 ModPythonHandler
  2. 가져 오기 설정을 사용자 정의 예외
  3. 로드 미들웨어
  4. 미들웨어 -> URLResolver
  5. 미들웨어 ->보기 -> 템플릿
  6. 미들웨어 -> HttpResponse에

하지만 내가 이해할 수없는 것은 캐시 관리와 같은 모든 기능을 실행하거나 장시간 계속 실행되는 Django의 일부이거나 요청 당 생성되는 인스턴스입니다. 당신이 조금 설명하거나 지시 할 수 있다면 정말 고맙겠습니다.

답변

4

"이해"의 출처는 밝히지 않았지만 실제로는 정확하지 않습니다. Django 자체는 실행 방식에 대해 매우 불가지론 스럽습니다 (서버에 따라 다름).하지만 각 요청마다 처음부터 호출하는 것은 매우 드문 일입니다. CGI만의 유일한 방법은 개처럼 실행됩니다.

매우 일반 용어로 말하자면, 장고를 실행할 수있는 두 가지 방법이 있습니다. 아파치의 mod_wsgi와 마찬가지로 웹 서버 자체의 프로세스 내에서 실행되거나 uwsgi/gunicorn과 같이 완전히 별도의 프로세스에서 실행되며 서버의 역방향 프록시를 통해 요청을 수신합니다. 어느 쪽이든, 장고 프로세스의 수명은 요청과 직접적으로 연결되어 있지는 않지만 많은 요청에서 지속됩니다. 예를 들어, mod_wsgi의 경우, 서버는 스레드 및/또는 프로세스 (구성에 따라 다름)를 시작하고 각각은 죽이고 재시작되기 전에 많은 수의 연속 요청을 지속합니다.

각 프로세스에 대해로드 된 모든 모듈은 프로세스 수명 동안 메모리에 남아 있음을 의미합니다. 미들웨어 이후의 모든 내용은 이며 요청 당 1 회이 실행되지만 대개는 다시 가져오고 실행할 필요가 없습니다.

+0

감사합니다. Daniel! 여러 요청에 대해 프로세스가 존재할 수 있음을 이해하지만 들어오는 요청이 더 이상 없다면 Django는 계속 실행되지 않습니다. 즉, 예를 들어 클래스 속성을 사용하는 모델에서 일부 데이터를 캐시하려고하면 프로세스가 종료되지 않는 한 메모리에 남아있게됩니다. 다음 프로세스에서 다시 가져온다. 내가 틀렸다면 나를 바로 잡으세요. –

+1

프로세스가 실행 중일 때만 데이터가 메모리에 남아 있지만 "더 이상 요청이 없으면 장고는 계속 실행되지 않습니다."라는 사실은 아닙니다. 이는 Google App Engine과 같은 자동 확장 기술을 사용하는 경우에만 발생합니다. 거의 모든 환경이 이와 같이 작동하지 않습니다. 또한 설명대로 캐싱은 각 프로세스에만 국한되며 프로세스간에 공유되지 않습니다. –

+0

감사합니다. 나는 당신의 의견을 upvote해야합니다. :-) –

관련 문제