概説 Tornade – 非同期Webサービス


20160126tornade_async

概説 Tornade の 5章 非同期Webサービス の記載が、そのままでは動かなかった。

サンプルとして、Twitter API を使っているが。
ずいぶん前に、変更になって、OAuth 認証を必要になった。

http://search.twitter.com/search.json

OAuth 認証を通すというやり方をあるが、そこは本質ではないので、
Twitter API もどきを作ってみた。

fake_twitter_server.py

from bottle import HTTPResponse, route, run
from datetime import datetime, timedelta
import time

@route('/')
def home():
    now = datetime.now()
    tweets = []
    for n in range(1,100) :
        t = now - timedelta(hours=+9, milliseconds=100*n)
        c = datetime.strftime(t, "%a, %d %b %Y %H:%M:%S +0000")
        tweets.append( '{"created_at":"' + c + '"}' )
    body = '{"results": [' + "\n"
    body += ", \n".join(tweets) + "\n"
    body += ']}'
    r = HTTPResponse(status=200, body=body)
    r.set_header('Content-Type', 'application/json')
    time.sleep(0.05)
    return r

run(host='0.0.0.0', port='9999')

これをどこかのサーバーで動作させる。
ローカルネット内だと、応答が速すぎて、同期と非同期の違いが出なかった。

Tornade 側
tweet_rate.py

#		response = client.fetch("http://search.twitter.com/search.json?" + \
#				urllib.urlencode({"q": query.encode('utf8'), "result_type": "recent", "rpp": 100}))
		response = client.fetch("http://YOUR_IP:9999") 

Sierge によるレンポンスの違い
同期:10.02 trans/sec
非同期:14.37 trans/sec
ジェネレータ: 14.59 trans/sec


コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です