Django超过了Postgres的最大连接数

我遇到一个Django应用程序的问题,当使用异步eventlet工作程序运行Gunicorn时,它超过了Postgres的最大同时连接数(100).当连接限制到达时,应用程序开始返回500错误,直到可以建立新连接.

这是我的数据库配置:

DATABASES = {
    'default': {
        'ENGINE': 'django.contrib.gis.db.backends.postgis',
        'NAME': 'django',
        'USER': 'django',
        'HOST': 'postgres',
        'PORT': 5432,
        'CONN_MAX_AGE': 60,
    }   
}   

这就是Gunicorn的创作方式:

gunicorn --bind 0.0.0.0:8080 --worker-class eventlet --workers 5 myapp.wsgi:application

这些是已安装的包:

> djano v1.7
> gunicorn v19.3
> eventlet v0.17
> psycopg2 v2.6

与Gunicorn工作人员一起运行时,Django无法在HTTP请求中重用连接吗?某种第三方数据库连接池是我唯一的选择吗?

更新15-03-23:CONN_MAX_AGE和异步Gunicorn工作人员似乎出现问题.连接确实是持久的,但从不在this post中提到的任何顺序请求中重用.将CONN_MAX_AGE设置为0会强制Django在请求结束时关闭连接,从而防止未使用的持久连接形成.

最佳答案 Django没有数据库连接池.看看PgBouncer.它是一个轻量级连接池,易于设置和配置:
https://wiki.postgresql.org/wiki/PgBouncer

简而言之:您的django应用程序连接到PgBouncer并且它有一个与Postgres连接的池,它重用它,因此永远不会超过最大连接限制.

点赞