我使用ajax long polling和Gevent实现了聊天。 要阅读,客户端ajax更新视图并等待 Gevent.event.wait进行更新。
问题: Django在请求开始时(获取会话信息)打开的Postgresql事务在请求结束前不会关闭。那些空闲的交易需要大量的内存。
关闭Postgresql事务最简洁的方法是什么 没有关闭请求?我正在发送 request_finished信号手动,但感觉就像一个黑客。
答案 0 :(得分:2)
你这样做的方式可能是你黑客框架内的最佳方式。您是否有任何理由试图在请求 - 响应过程中进行长时间轮询,而不是使用django-socketio之类的内容?
答案 1 :(得分:0)
见这里:https://docs.djangoproject.com/en/dev/topics/db/transactions/#django.db.transaction.commit_manually
@transaction.commit_manually
def yourview(request):
# do your db actions
transaction.commit()
或者如果您更喜欢上下文管理器:
def yourview(request):
...
with transaction.commit_manually():
# do your db actions
...
此外,如果您在打开PostgreSQL连接时出现内存问题,那么您应该使用pgbouncer或存在的各种gevent连接池来查找池化解决方案。你应该看到这样做会带来相当大的性能提升。