pymongo + gevent:给我一个香蕉,只是monkey_patch?

时间:2011-08-23 20:15:08

标签: python mongodb pymongo monkeypatching gevent

在这里需要更多关于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的快速写入(请求)也会导致大规模异步应用程序出现问题。 (当然,非阻塞读取可能从一开始就会引起问题!)

2 个答案:

答案 0 :(得分:18)

我已经将PyMongo与Gevent一起使用,以下是您需要注意的一些事项:

  1. 仅实例化一个pymongo.Connection对象,最好是全局或模块级变量。这很重要,因为Connection本身就有一个游泳池!
  2. 猴子修补所有东西,或者至少是套接字和线程。由于在Connection中使用了线程本地,仅仅修补套接字是不够的。
  3. 请记得致电end_request以返回与游泳池的连接。
  4. 你的问题的答案是继续,PyMongo与Gevent一起工作正常。

答案 1 :(得分:2)

在初始检查时,它似乎没有在c代码中执行任何套接字操作,因此它应该没问题(阻塞操作应该只阻止绿色线程)。