Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Django-postgreSQL-为每个页面建立新连接_Django_Postgresql_Connection Pooling - Fatal编程技术网

Django-postgreSQL-为每个页面建立新连接

Django-postgreSQL-为每个页面建立新连接,django,postgresql,connection-pooling,Django,Postgresql,Connection Pooling,设置.py DATABASES = { 'default': { 'ENGINE': 'django.db.backends.postgresql', 'NAME': 'tutorial', 'USER': 'postgres', 'PASSWORD': '', 'HOST': 'localhost', 'PORT': '5432', 'CONN_MAX_AGE': 10,

设置.py

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.postgresql',
        'NAME': 'tutorial',
        'USER': 'postgres',
        'PASSWORD': '',
        'HOST': 'localhost',
        'PORT': '5432',
        'CONN_MAX_AGE': 10,
    }
}
当我导航到网站中的链接时,会创建一个新的连接。例如,输入后,将创建一个新连接:

2018-08-10 06:22:15.301 CDT [3380] LOG:  connection received: host=::1 port=56368
2018-08-10 06:22:15.306 CDT [3380] LOG:  connection authorized: user=postgres database=tutorial
导航到其中一个链接时,会创建另一个新连接

2018-08-10 06:20:10.095 CDT [22932] LOG:  connection received: host=::1 port=56181
2018-08-10 06:20:10.098 CDT [22932] LOG:  connection authorized: user=postgres database=tutorial
当我访问了我域内的10个不同链接并访问了我的第11个链接时,它最终达到了最大可用连接数,并断开了我通过访问建立的第一个连接:

请注意,
port=56368
与我第一次访问我的主机时打开的端口完全相同。显然,每次我访问一个新链接时都会建立一个新连接,如果当前连接数超过最大连接数,第一个连接就会断开以接受新连接

但这不是我想要的。我不希望每次用户访问我域内的链接时都创建新连接。我希望在我的整个域中每个用户只使用一个连接。如果用户打开一个新选项卡,那么我可能想建立一个新连接,但不确定这是否是正确的方法

我怎样才能做到这一点?理想情况下,我希望使用连接池,但我真的不知道如何在Django内部实现它。我知道如何使用纯的
psycopg2
建立连接池系统,但不确定是否希望这样做,因为Django可能支持这种功能。或者我应该为连接池编写单独的
psycopg2
代码吗

编辑

我知道
CONN\u MAX\u AGE
指定了一个请求可以活动的秒数。但是,我用来加载页面的连接在加载10秒后不会关闭。但是相反,它的行为好像是设置了最大连接数,我不知道为什么。仅当连接数超过连接最大年龄时,日志文件才会输出断开连接:消息。加载页面10秒后,它不会输出
断开连接
消息


我使用的是Django 2.0.6、psycopg2.7.5、postgreSQL 10、CONN MAX AGE是连接保持活动的秒数。尝试从数据库设置中删除该参数


Django本质上不支持连接池。您可以尝试从池中建立连接并关闭连接。但这不是实际的连接池。

通过将
连接最大年龄设置为10,您可以让会话每10秒超时一次。默认情况下,它设置为
,这意味着连接永远不会过期。此外,按用户分组连接有点奇怪。Django可以很好地处理连接池,通过添加这样的规则,性能可能会下降。@WillemVanOnsem我想我不了解如何在Django上实现连接池。出于学习目的,您有什么推荐的链接吗?@WillemVanOnsem,当我设置
CONN\u MAX\u AGE=4
时,连接在运行后4秒内没有断开。但是,当连接达到4时,第一个连接似乎关闭了。这是我从日志中观察到的。Ik文档以秒为单位表示,但从日志来看,其行为与文档中所述的不同
2018-08-10 06:30:17.715 CDT [6884] LOG:  disconnection: session time: 0:00:09.011 user=postgres database=tutorial host=::1 port=56368