在执行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")
答案 0 :(得分:0)
回调函数中引用的实例self
将一直闲置到回调函数结束,因此self.arguments
内的_valid_app
始终可用。
如果在对Mongo的异步调用期间对同一个处理程序发出另一个请求,可能会让您感到困惑。这不会是一个问题,因为对于任何新请求,都会创建MainHandler
的新实例,而不会干扰前一个实例。