settings.py
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.postgresql',
'NAME': 'tutorial',
'USER': 'postgres',
'PASSWORD': '',
'HOST': 'localhost',
'PORT': '5432',
'CONN_MAX_AGE': 10,
}
}
当我导航到网站中的链接时,将创建一个新的连接。例如,输入<domain.com
>后,将创建一个新连接:
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
然后导航到其中一个链接(例如<domain.com/some_page/
>)后,将创建另一个新连接。
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个链接时,它最终达到了最大的可用连接,并断开了我通过访问<domain.com
>建立的第一个连接:
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
请注意,port=56368
与我第一次访问<domain.com
>时打开的端口完全相同。显然,每次我访问新链接时都会建立一个新连接,并且如果当前连接数超过了最大连接数,则将断开第一个连接以接受新连接。
但这不是我想要的。我不希望每次用户访问我的域内的链接时都创建新的连接。我想在每个用户的整个域中仅使用一个连接。如果用户打开一个新选项卡,那么我可能想建立一个新的连接,但是不确定这是否是正确的方法。
我该如何实现?理想情况下,我想使用连接池,但是我真的不知道如何在Django中实现它。我知道如何使用纯psycopg2
建立连接池系统,但不确定是否要那样做,因为Django可能支持这种功能。还是应该为连接池编写单独的psycopg2
代码?
修改
我知道CONN_MAX_AGE
指定了请求可以存在的秒数。但是,我用来加载页面的连接在加载10秒后没有关闭。但是,相反,它的行为好像CONN_MAX_AGE
设置了最大连接数,我不知道为什么。仅当连接数超过disconnection:
时,日志文件才会输出CONN_MAX_AGE
消息。加载页面10秒后,它不会输出disconnection
消息。
我正在使用Django 2.0.6
,psycopg2 2.7.5
,postgreSQL 10
答案 0 :(得分:0)
“ CONN_MAX_AGE”是您的连接保持活动的秒数。尝试从数据库设置中删除该参数。
Django本质上不支持连接池。您可以尝试从池中建立连接并关闭连接。但这不是实际的连接池。