[英]How to keep tornado call 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")
在回调函数中self
引用的实例将一直挂在回调函数的末尾,因此self.arguments
将始终在_valid_app
可用。
如果在对Mongo的异步调用期间向同一处理程序提出另一个请求,将会发生什么,您可能会感到困惑。 这不会有问题,因为对于任何新请求, MainHandler
创建一个新的MainHandler
实例,而不干扰前一个实例。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.