3

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

pymongo + gevent:给我一个香蕉,然后给我monkey_patch?

和这个问题

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

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

https://gist.github.com/1184264

4

2 回答 2

0

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

原答案:

显然,您可以通过使用“代理类......将请求排队到工作人员,他们根据需要分配新的 PyMongo 连接,在连接错误时丢弃它们等并调用目标方法”来解决这个问题,如下所述:

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

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

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

于 2012-02-04T15:53:57.703 回答
0

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

mongoengine.connection.get_connection('default').start_request()

mongoengine.connection.get_connection('default').end_request()

于 2013-04-17T02:53:03.223 回答