我尝试在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
的连接。我也尝试了这个补丁,但它对我没有帮助(除非我使用它错了)
答案 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()