mongoengine与gevent,如何关闭/结束连接?

时间:2011-10-15 20:15:56

标签: python mongodb pymongo gevent mongoengine

我尝试在gevent进程中执行connection refused because too many open connections: 204时收到MyApp.objects.get(foo=bar)。在models.py中,我有connect('my_db')。在我的脚本中,我gevent.monkey.patch_all()我看到了这个问题

pymongo + gevent: throw me a banana and just monkey_patch?

和这个问题

https://github.com/hmarr/mongoengine/issues/272

但我不明白如何访问要调用end_request的连接。我也尝试了这个补丁,但它对我没有帮助(除非我使用它错了)

https://gist.github.com/1184264

2 个答案:

答案 0 :(得分:0)

更新:今年早些时候在pymongo解决了这个问题。确保你使用的是最新版本的pymongo。

原始答案:

显然,您可以通过使用“代理类...将请求排队到工作人员,按需分配新的PyMongo连接,丢弃连接错误等等,并调用目标方法”来解决此问题,如上所述这里:

http://groups.google.com/group/gevent/browse_thread/thread/a423d1a15d83f73c

(见Antonin Amand 2011年8月31日的帖子和Alexey Borzenkov的回复)

P.S。而且,无论如何,MongoDB人员正在努力解决这个问题:https://jira.mongodb.org/browse/PYTHON-296

答案 1 :(得分:0)

这似乎是用mongoengine做的方法(假设你有一个默认连接):

mongoengine.connection.get_connection( '默认')。START_REQUEST()

mongoengine.connection.get_connection( '默认')。END_REQUEST()