2011-12-26 20 views
0

コールバック関数内のself.get_argument( "ip_address")のような引数にまだアクセスしている場合、この呼び出しは実際には非ブロック化ですが、以下のクラスのような非同期mongodbクエリを実行していますか?呼び出しを非同期に保つために、このような引数にアクセスしないでください。コールバック関数内で参照竜巻を非同期に呼び出す方法は?

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

インスタンスselfしたがってself.argumentsが常に_valid_app内部に利用できるようになり、コールバック関数が終了するまでぶらぶらします。

Mongoへの非同期呼び出し中に同じハンドラへの別のリクエストが行われた場合に起こりうることによって混乱するかもしれません。これは問題ではないでしょう。新しい要求に対しては、新しいインスタンスがMainHandlerで作成され、前のインスタンスと干渉しないためです。

関連する問題