2011年6月20日

tornadoで複数リクエストを非同期で行うとか

仕組みは簡単に、
build_url, parse_response, build_page の3つのメソッド実装で、後は勝手に build_urlreturn した、URLへアクセスして、応答が返ってきたら、parse_response 内で、dictionary型の変数を、return すると、build_page で、self.context で値を取り出して、create した結果ページを return すれば良い。

ここには記載していないですが、build_url の return で、複数URLを返すと、順番にアクセスして、全部の応答が返ってきた時に、all_complete が呼ばれるので、そこで、すべてが返って来たときの処理とかも入れる。

class ExampleSingleProxyHandler(BaseHandler):
    def build_url(self):
        querys = set()

        return exampleUrl + '?' + '&'.join([ k + '=' + str(v) for k, v in querys ])

    def parse_response(self, response):
        j = json.load(response['body'])

        # return dictionary
        return parsed_context

    def build_page(self):
        # self.context .. parsed_context

        return response_page

動かないけどww ソース置いておきます。何かの参考になれば。。。
git: https://github.com/iwai/tornado_multiple_request/blob/master/web.py

かなり適当に置いたので、後で、少し整理します&このブログも、もっと、ちゃんと書き直しますwww