gunicorn+gevent+django+PostgreSQL下的数据库连接情况


最近写一个项目,边进行代码编写,边阅读django的源码,有些疑问:

首先设置如下场景:

  • 以gunicorn作为部署服务器,worker class使用gevent,worker数量为4
  • gunicorn的max requests参数设为100
  • django使用psycopg2的backend作为数据库驱动代理
  • 使用psycogreen来patch psycopg2,使之能够支持gevent的协程
  • Django使用1.6以上的版本

问题如下:

  1. 在上述gunicorn的配置下,应该有4个python进程处理request,每个进程下是否都是为每一个request分配一个gevent协程来处理?
  2. 如果上一问中的答案为 ,那么是否每一个协程都会创建一个连接?比如:参考上面的配置,假如某个进程现在有40个请求待处理,那么它将创建40个协程,同时每个协程创建一个数据库连接,也就是40个连接(不一定同时创建,考虑到各个请求的处理时间长度不一样)?
  3. Django 1.6引入的 CONN_MAX_AGE 这个数据库配置的参数如何影响上一问中的数据库连接创建的情况?

希望有熟悉情况的哥们能够回答一下。

gevent PostgreSQL gunicorn django

vivca 11 years, 7 months ago

Your Answer