Skip to main content
 首页 » 编程设计

python之Django 持久连接(CONN_MAX_AGE)是如何分布的

2024年10月24日30wayfarer

据我所知,Django 与数据库的持久连接数量与 CONN_MAX_AGE 所代表的数量一样多。

如果是这样,将连接分发到应用程序的规则是什么?

例如。

case 1. 无论是多进程、多线程环境,应用每次请求都会分发连接。(比如在异步环境下,每个请求可以有一个连接)

case 2. connections被分配到每个thread(thread level)

case 3. 连接分布到各个进程(进程级)

有什么方法可以监控这种行为吗?

DB 中是否有任何预先设置以方便 Django 中的 DB conntion 池。

请您参考如下方法:

class ConnectionHandler(object): 
    def __init__(self, databases=None): 
        """ 
        databases is an optional dictionary of database definitions (structured 
        like settings.DATABASES). 
        """ 
        self._databases = databases 
        self._connections = local() 

连接是本地线程。

请注意,从数据库的角度来看,几乎总是不建议在多个线程之间共享连接。

当然,进程之间不会共享非持久性数据。

对于连接池,您需要在 django 和数据库之间使用一些代理。但是如果你使用持久连接,你可以在 wsgi 中使用多个线程实现类似的效果,它将保持与 DB 的多个连接。