13

Quickie 这里需要比我现在更多的 pymongo 领域专业知识:

pymongo 驱动程序的“正确”部分是否是用 python 编写的,我可以调用 gevent monkey_patch() 并成功改变 pymongo 在 gevent“异步”greenlets 中的 r/w 阻塞行为?

如果这需要在 gevent 和 pymongo 上做更多的工作——但这​​是可行的——只要我能在 irc 上获得一些指导,我就非常愿意投入时间。

谢谢!

注意:在小规模的 mongo 写入不是一个大问题,因为我们只是在解除阻塞之前排队写入“请求”。但是与 fiorix 谈论他扭曲的异步 mongo 驱动程序(https://github.com/fiorix/mongo-async-python-driver),即使是 mongo 的快速写入(请求)也可能导致大规模异步应用程序出现问题。(当然,非阻塞读取可能从一开始就引起问题!)

4

2 回答 2

19

我已经将 PyMongo 与 Gevent 一起使用,这里有一些你需要注意的事情:

  1. 仅实例化一个pymongo.Connection对象,最好作为全局或模块级变量。这很重要,因为Connection它内部有一个游泳池!
  2. 猴子修补所有东西,或者至少同时修补套接字和线程。由于在 中使用线程局部变量Connection,仅修补套接字是不够的。
  3. 请记住调用end_request以将连接返回到池。

您的问题的答案是继续,PyMongo 与 Gevent 配合得很好。

于 2011-08-24T00:39:52.440 回答
2

在最初的检查中,它似乎没有在 c 代码中执行任何套接字操作,所以应该没问题(阻塞操作应该只是阻塞绿色线程)。

于 2011-08-23T23:29:31.273 回答