在这里需要更多关于pymongo的领域专业知识,而不是现在:
用python编写的pymongo驱动程序的“正确”部分是否可以调用gevent monkey_patch()并在gevent“异步”greenlets中成功改变pymongo在r / w上的阻塞行为?
如果这需要在gevent和pymongo上多做一些腿部工作 - 但这是可行的 - 只要能得到一点关于irc的指导,我就会非常愿意投入时间。
谢谢!
注意:在小规模mongo写入不是一个大问题,因为我们只是在解锁前排队写入“请求”。但是与fiorix谈论他的扭曲异步mongo驱动程序(https://github.com/fiorix/mongo-async-python-driver),即使是mongo的快速写入(请求)也会导致大规模异步应用程序出现问题。 (当然,非阻塞读取可能从一开始就会引起问题!)
答案 0 :(得分:18)
我已经将PyMongo与Gevent一起使用,以下是您需要注意的一些事项:
pymongo.Connection
对象,最好是全局或模块级变量。这很重要,因为Connection
本身就有一个游泳池!Connection
中使用了线程本地,仅仅修补套接字是不够的。end_request
以返回与游泳池的连接。你的问题的答案是继续,PyMongo与Gevent一起工作正常。
答案 1 :(得分:2)
在初始检查时,它似乎没有在c代码中执行任何套接字操作,因此它应该没问题(阻塞操作应该只阻止绿色线程)。