【问题标题】:Django request threads and persistent database connectionsDjango 请求线程和持久数据库连接
【发布时间】:2015-09-23 21:53:13
【问题描述】:

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

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

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

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

【问题讨论】:

  • 这取决于您使用的是哪个应用服务器。

标签: django


【解决方案1】:

Django 不控制任何线程(嗯...也许在开发服务器中,但它非常简单),但 uWSGI 是。 uWSGI 将根据其配置生成一些线程,并且在每个线程中它将运行 django 请求处理。

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

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

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

在 uWSGI 中也有 worker - 可以产生自己的线程的独立进程,因此可以更好地分散负载。

您还可以拥有多个 uWSGI 服务器并告诉您的 HTTP 服务器(apache、代理)在它们之间传播请求。这样,您甚至可以在不同的机器上为您的 uWSGI 实例提供服务,并且从外部看它就像一个大型服务器。

【讨论】:

  • 嗨,uWSGI 重用线程是对的吗?你有任何文件来支持它吗?干杯。
猜你喜欢
  • 2023-04-09
  • 2010-11-10
  • 2013-08-03
  • 1970-01-01
  • 2016-03-14
  • 1970-01-01
  • 2011-08-09
  • 2010-09-21
  • 2015-06-09
相关资源
最近更新 更多