Django,Ajax长轮询,Postgresql:空闲事务

时间:2012-02-15 23:36:19

标签: django postgresql django-views long-polling gevent

我使用ajax long polling和Gevent实现了聊天。 要阅读,客户端ajax更新视图并等待 Gevent.event.wait进行更新。

问题: Django在请求开始时(获取会话信息)打开的Postgresql事务在请求结束前不会关闭。那些空闲的交易需要大量的内存。

关闭Postgresql事务最简洁的方法是什么 没有关闭请求?我正在发送 request_finished信号手动,但感觉就像一个黑客。

2 个答案:

答案 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连接池来查找池化解决方案。你应该看到这样做会带来相当大的性能提升。