Django请求线程和持久数据库连接

时间:2015-09-23 21:53:14

标签: django

我正在阅读有关CONN_MAX_AGE设置的内容,文档说:

  

由于每个线程都维护自己的连接,因此您的数据库必须至少支持与工作线程一样多的并发连接。

所以我想知道,在uWSGI上,Django进程如何维护它自己的线程,是否为每个请求生成新线程并在请求结束时终止它?

如果是,停止的线程如何保持连接?

1 个答案:

答案 0 :(得分:3)

Django无法控制任何线程(好吧......可能在开发服务器中,但它非常简单),但是uWSGI是。 uWSGI将产生一些线程,具体取决于它的配置,并且在每个线程中它将运行django请求处理。

产生线程可以是动态的或静态的,它可以是严格的4个线程,也可以是动态的,从2到12,具体取决于负载。

不,每个请求都没有新的线程,因为这会允许某人通过与它建立许多并发连接来杀死你的服务器,因为它会产生很多线程,没有服务器会接受它。

在每个线程上逐个处理请求,主uWSGI进程将在线程之间循环请求。如果请求多于线程,则其中一些请求将等待其他请求完成

在uWSGI中,还有工作者独立的进程可以生成自己的线程,因此可以更好地扩展负载。

此外,您可以拥有多个uWSGI服务器,并告诉您的HTTP服务器(apache,proxy)在它们之间传播请求。这样你甚至可以在不同的机器上为你的uWSGI实例提供服务,它们看起来就像从外面看作是一个大服务器。