Django线程结构

时间:2017-03-05 15:57:40

标签: python django server django-templates

首先以“是”开头我检查并搜索了这个主题,但找不到能给我一个明确答案的东西吗?我是 Djagno 的初学者并研究其文档,其中我读到了关于模板标签节点渲染方法的线程安全注意事项。以下是文档Link的链接。我的问题在于它指出一旦解析了节点,该节点的渲染方法可能被多次调用我很困惑它是否在谈论在不同的同一文档中使用模板标签服务器上用户的单个实例级别的同一用户的位置来自世界各地的用户在内存中共享同一django实例的多个请求使用模板标记?如果后者,那么就不会为每个新用户请求在服务器级别创建一个新实例,并为内存中的每个用户分配单独的资源,或者我对此有误?

1 个答案:

答案 0 :(得分:0)

后者。

WSGI服务器通常运行许多持久进程,并且在每个进程中它运行许多线程。虽然可以应用一些自动缩放,但进程和线程的数量或多或少是不变的,并确定Django可以处理多少并发请求。每个请求创建新CGI流程的日子早已不复存在,并且在大多数情况下,持久流程效率更高。

每个进程都有自己的内存,进程之间的通信通常由数据库,缓存等处理。它们不能直接通过内存进行通信。

进程中的每个线程共享相同的内存。这意味着可以从其他线程访问任何非本地作用域的对象(例如,仅在函数内定义)。缓存的模板加载器每个进程解析一次每个模板,每个线程使用相同的解析节点。这也意味着如果你设置例如self.foo = 'bar'在一个帖子中,每个帖子在访问'bar'时都会看到self.foo。由于多个线程同时运行,这很快就会变得无法调试,这就是线程安全如此重要的原因。

正如文档所述,只要您不在self上存储数据,而是将其放入context.render_context,您应该没问题。