0

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) コマンドが実行されたときにこれらの非同期コールバックは実行されません)。メインクラスがスリープコマンドを発行した場合でも、バックグラウンド処理を実行できるようにする方法はありますか?

4

1 に答える 1

1

竜巻の定期的なコールバックを自分で開きます。そして、あなたはこのようなものを手に入れるでしょう。

#!/usr/bin/env python
# -*- coding: utf-8 -*-

import tornado.web
import tornado.httpserver
import tornado.ioloop

KEYWORDS = []

class MyApplication(tornado.web.Application):

  def period_run(self):
    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)

app = MyApplication(handlers=urls, **settings)

http_server = tornado.httpserver.HTTPServer(app, xheaders=True)

loop = tornado.ioloop.IOLoop.instance()
TIME_TO_RUN = 400
period_cbk = tornado.ioloop.PeriodicCallback(app.period_run, 3000 + TIME_TO_RUN, loop)
period_cbk.start()
loop.start()

詳細については、こちらをご覧ください

于 2012-06-21T08:43:51.387 に答える