使用gevent向django添加db连接池

django-db-geventpool的Python项目详细描述


django db geventpool
===========

图片::http://img.shields.io/travis/jneight/django db geventpool.svg
:目标:https://travis ci.org/jneight/django db geventpool
:alt:travis

。图片::https://img.shields.io/pypi/v/django db geventpool.svg
:目标:https://pypi.python.org/pypi/django db geventpool
:alt:pypi版本

。图片::http://img.shields.io/pypi/l/django db gevent pool.svg
:target:https://pypi.python.org/pypi/django db geventpool
:alt:pypi license

=1.6)*

python 3受支持,但如果"gevent"安装不成功,它将使用"eventlet"。

--


*``psycopg2>;=2.5.1``用于cpython 2和3(或"psycopg2 binary<;https://pypi.org/project/psycopg2 binary/>;`-请参阅"psycopg2 2.7.4发行版中的说明"<;http://initd.org/psycopg/articles/2018/02/08/psycopg-274-released/>;````````psycopg2cffi>;=2.7``对于pypy


patch psycopg2
----


psycopg2必须使用psycogreen进行修补,如果您使用的是"gunicorn webserver"<;http://www.gunicorn.org/>;`,
一个好地方是配置文件中的"post戋u fork"<;http://docs.gunicorn.org/en/latest/settings.html ` ` post fork>;` `函数:

。代码::python

from psycogreen.gevent import patch_psycopg如果使用来自psycogreen的gevent workers
,请使用此命令。eventlet import patch_psycopg如果使用eventlet workers

def post_fork(服务器,worker):
patch_psycopg()
worker.log.info("made psycopg2 green")




-


+在数据库设置中将*engine*设置为:
+*'django_db_geventpool.backends.postgresql_psycopg2'*
+对于postgis:*"django_db_geventpool.backends.postgis"*
+add*max_conns*to*options*设置允许到数据库的最大连接数(默认值=4)
+如果使用django 1.6或更高版本,则将*conn_max_age":0*添加到设置以禁用默认django永久连接功能。如果要手动生成greenlets

,请阅读下面的注释。代码::python

#未与sqlite3一起使用。
"密码":"postgres";"未与sqlite3一起使用。
"主机":","设置为本地主机的空字符串。未与sqlite3一起使用。
"端口":",默认设置为空字符串。不与sqlite3一起使用。
"选项":{
"最大连接":20
}
}
}


否则连接将永远不会返回池
数据库={
"默认":{
"引擎":"django-db-geventpool.backends.postgresql-psycopg2",
"名称":"db",
"用户":"postgres",
"密码":"postgres",
"主机":",
"端口":",
"原子请求":false,
"连接最大年龄":0,
"选项":{
"最大连接":20
}
}
}



足以将conn_max_age设置为0。
django仅在以下情况下检查长时间连接完成一个请求-因此,如果您手动生成一个greenlet(或让一个任务生成一个greenlet),那么它的连接将
不会被清理,并且将一直存在到超时。在生产中,这可能会导致相当多的连接打开,而在开发时,这可能会妨碍您的测试用例。

若要解决此问题,请确保每个greenlet在结束之前发送django.core.signals.request_finished信号或调用django.db.close_old_connections()。装饰方法是首选方法,但其他方法也有效。

…代码::python

from django_db_geventpool.utils import close_connection

@close_connection
def greenlet_worker()



代码::来自django.core.signals的python


代码::来自django.db的python


`
*`django postgresql<;https://github.com/kennethreitz/django postgrespool>;`

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
如何使用Netbeans在Java中创建可执行文件   swing Set不透明(真/假);JAVA   java JPA无法删除具有onotomany关系和cascatype all的实体   java Hibernate自参考映射难题   Java/从字符串到Java代码   java为什么我已经在取整了,却得到了一个无终止小数扩展?   java Wicket onsubmit信息对话框   java如何使用类、类加载器和URL获取资源   java在多模块项目中使用License Maven插件时出错   java HashSet“contains”方法是如何工作的?   图像JavaPNG显示为黑色   java如何在保持内容完整的同时在两个活动之间切换?   JAVA在Tomcat 7.0.27中,WAR无法为Prod正确解包   listview的java onclicklistener   JavaXPages托管Bean可以跨多个数据库工作吗?   java无法停止服务空对象引用错误Android   java将UTF8编码的字符串转换为人类可读的字符串   JavaSpring与JBossSAML的集成   java如何替换AuthorizationCodeInstalledApp类?