Har*_*ons 54 python database django mod-wsgi persistent
我正在使用django和apache以及mod_wsgi和PostgreSQL(都在同一主机上),我需要处理很多简单的动态页面请求(每秒数百个).我遇到的问题是瓶颈是django没有持久的数据库连接并且在每个请求上重新连接(需要接近5ms).在进行基准测试时,我得到了持久连接,我可以处理接近500 r/s而没有我只得到50 r/s.
有人有什么建议吗?如何修改django以使用持久连接?或者加速从python到DB的连接
提前致谢.
Ces*_*ssa 30
Django 1.6添加了持久连接支持(链接到django 1.9的doc):
持久连接避免了在每个请求中重新建立与数据库的连接的开销.它们由CONN_MAX_AGE参数控制,该参数定义连接的最长生命周期.可以为每个数据库单独设置.
小智 22
试试PgBouncer - PostgreSQL的轻量级连接池.特征:
Gle*_*ard 20
在Django trunk中,编辑django/db/__init__.py
并注释掉该行:
signals.request_finished.connect(close_connection)
Run Code Online (Sandbox Code Playgroud)
此信号处理程序使其在每次请求后都与数据库断开连接.我不知道这样做的所有副作用是什么,但是在每个请求之后启动新连接没有任何意义; 正如你所注意到的那样,它会摧毁你的表现.
我现在正在使用它,但我没有做过全套测试,看看是否有任何问题.
我不知道为什么每个人都认为这需要一个新的后端或一个特殊的连接pooler或其他复杂的解决方案.这似乎很简单,虽然我不怀疑有一些模糊不清的问题让他们首先这样做 - 应该更明智地处理; 正如您所注意到的,对于高性能服务而言,每个请求的5ms开销是相当多的.(我花了150毫秒 - 我还没弄明白为什么.)
编辑:另一个必要的变化是在django/middleware/transaction.py; 删除两个transaction.is_dirty()测试并始终调用commit()或rollback().否则,如果它只从数据库中读取,它将不提交事务,这将使应该关闭的锁打开.
Igo*_*son 15
我创建了一个小的Django补丁,通过sqlalchemy池实现MySQL和PostgreSQL的连接池.
这在很长一段时间内完美地适用于http://grandcapital.net/的制作.
这个补丁是在谷歌搜索了一下之后编写的.
归档时间: |
|
查看次数: |
34435 次 |
最近记录: |