Tornado + Gevent + PyMongo - 这是异步请求的有效且安全的解决方案吗?

时间:2013-11-08 20:41:50

标签: python tornado pymongo gevent

我们正在使用Tornado提供MongoDB查询结果 问题是查询阻止Http服务器直到它返回,这会导致响应缓慢,在某些情况下会导致超时 我们的解决方案是使用Gevent来处理异步请求,如下所示:

from gevent import monkey; monkey.patch_all()
import gevent
from tornado.web import RequestHandler, asynchronous

class Query(RequestHandler):
    @asynchronous
    def get(self):
        def async_query():
            # The following pymongo_client object is created
            # at the application and passed in the 'settings' dict.
            pymongo_client.do_some_long_query()
            self.write('Done')
            self.finish()

        gevent.spawn(async_query)

这实际上可以工作,释放服务器以在执行查询时接受和处理请求 我们关注的是三者在“现实世界”中的结合 它们是否合在一起?或者我们是否遗漏了可能在实际流量中出现问题的内容?

1 个答案:

答案 0 :(得分:0)

有一个用于连接Tornado的MongoDB的异步库,名为Motor。使用它应该比将两个不同的框架混合在一起更好。