【发布时间】:2015-09-23 21:53:13
【问题描述】:
我正在阅读有关 CONN_MAX_AGE 设置的信息,文档说:
由于每个线程都维护自己的连接,因此您的数据库必须支持至少与工作线程一样多的同时连接。
所以我想知道,在 uWSGI 上,Django 进程如何维护它自己的线程,它是否为每个请求生成新线程并在请求结束时终止它?
如果是,停止的线程如何维持连接?
【问题讨论】:
-
这取决于您使用的是哪个应用服务器。
标签: django
我正在阅读有关 CONN_MAX_AGE 设置的信息,文档说:
由于每个线程都维护自己的连接,因此您的数据库必须支持至少与工作线程一样多的同时连接。
所以我想知道,在 uWSGI 上,Django 进程如何维护它自己的线程,它是否为每个请求生成新线程并在请求结束时终止它?
如果是,停止的线程如何维持连接?
【问题讨论】:
标签: django
Django 不控制任何线程(嗯...也许在开发服务器中,但它非常简单),但 uWSGI 是。 uWSGI 将根据其配置生成一些线程,并且在每个线程中它将运行 django 请求处理。
生成线程可以是动态的或静态的,它可以是严格的 4 个线程,也可以是 2 到 12 个动态的,具体取决于负载。
不,每个请求都没有新线程,因为这将允许某人通过与它建立许多并发连接来杀死您的服务器,因为它会产生如此多的线程,以至于没有服务器会接受它。
请求在每个线程上被一一处理,主 uWSGI 进程将在线程之间循环请求。如果请求数多于线程数,则其中一些会等待其他线程完成
在 uWSGI 中也有 worker - 可以产生自己的线程的独立进程,因此可以更好地分散负载。
您还可以拥有多个 uWSGI 服务器并告诉您的 HTTP 服务器(apache、代理)在它们之间传播请求。这样,您甚至可以在不同的机器上为您的 uWSGI 实例提供服务,并且从外部看它就像一个大型服务器。
【讨论】: