Tornado について概念的な疑問を感じました。
Twitter APIに対して実行しているクエリのリストがあります。
だから私は次のようなものを持っています
while (keywords):
if (requests.remaining > 300) :
self.twitter_request(path= "/search",access_token=self.current_user["access_token"],
callback=(yield gen.Callback("key")),q=word)
response = yield gen.Wait("key")
self.parse_response(response)
else:
sleep(3000)
parse_response は次のように定義されます。
def parse_response(self,response):
//parse the response object
//check if number of results returned is 100. If yes then, check current page number.
//if less than 4 then
self.twitter_request(path= "/search",access_token=self.current_user["access_token"],
callback=self.async_callback(self._parse_response,fileIter= fileIter,fileType= fileType, query= query),q=query,rpp="100")
return
したがって、基本的に私のparse_response関数は応答を解析し、page_numberが4になるまで同じキーワードに対してより多くのページを要求しています.
しかし、この補助関数を呼び出すメイン ループでは、time.sleep(3000) を呼び出すと中断されます。メインスレッドがスリープしているため、これによりバックグラウンド関数がスリープ状態になり、このメインスレッドがアクティブになると再開されます。(最初にキーワードを要求し、parse_Response が async_Callback を使用しているため、sleep(3000) コマンドが実行されたときにこれらの非同期コールバックは実行されません)。メインクラスがスリープコマンドを発行した場合でも、バックグラウンド処理を実行できるようにする方法はありますか?