Django框架如何在幕后工作?

时间:2014-04-17 20:24:20

标签: python django uwsgi gunicorn django-middleware

这可能听起来很愚蠢,所以请提前道歉。

我试图了解Django框架如何在幕后实际工作。我的理解是,当请求进入并按如下方式处理时,Django不会一直运行并被uwsgi / gunicorn或其他任何东西调用:

  1. WsgiHandler或ModPythonHandler
  2. 导入设置,自定义例外
  3. 加载中间件
  4. 中间件 - > URLResolver
  5. 中间件 - >查看 - >模板
  6. 中间件 - >的HttpResponse
  7. 但是我无法理解的是,Django的任何部分都会像缓存管理或其他一些函数或实例一样一直运行而不是按请求创建。如果你能解释一下或指点,我真的很感激。

1 个答案:

答案 0 :(得分:4)

你没有说出你的“理解”来自何处,但它并不准确。 Django本身对它如何运行非常不可知 - 它取决于服务器 - 但是在每个请求上从头开始调用它是非常不寻常的。关于这种情况的唯一方法是CGI,它会像狗一样运行。

非常一般术语来说,Django有两种运行方式。它既可以在Web服务器本身的进程内运行 - 就像在Apache上运行mod_wsgi一样 - 或者它在一个完全独立的进程中运行,并通过服务器的反向代理接收请求,就像uwsgi / gunicorn一样。无论哪种方式,Django进程的生命周期都与请求没有直接关系,但在许多请求中都是持久的。例如,在mod_wsgi的情况下,服务器启动线程和/或进程(取决于配置),并且每个请求在被杀死和重新启动之前持续进行大量连续请求。

对于每个进程,这意味着已加载的任何模块都会在进程的生命周期内保留在内存中。从中间件开始,每个请求都会执行执行一次,但通常不需要每次重新导入和运行它们。