如何保持龙卷风调用异步?

时间:2011-12-26 19:37:19

标签: python mongodb tornado

在执行async mongodb查询时,如下面的类中的那样,如果我仍然可以访问回调函数中的self.get_argument(" ip_address")这样的参数,那么这个调用是如何非阻塞的? ?或者我是否应该访问这样的参数以保持呼叫异步?

class MainHandler(tornado.web.RequestHandler):
    def get(self):
        app_key = self.get_argument("app_key")

        #async call to mongodb. call _valid_app afterwards
        db.apps.find_one({'app_key': app_key}, callback=self._valid_app);

    def _valid_app(self, response, error):
       if error:
           raise tornado.web.HTTPError(500)

       if response:
           ip_address = self.get_argument("ip_address")
           #rest of the code
       else:
           print("invalid app_key")

1 个答案:

答案 0 :(得分:0)

回调函数中引用的实例self将一直闲置到回调函数结束,因此self.arguments内的_valid_app始终可用。

如果在对Mongo的异步调用期间对同一个处理程序发出另一个请求,可能会让您感到困惑。这不会是一个问题,因为对于任何新请求,都会创建MainHandler的新实例,而不会干扰前一个实例。