はじめてのTornado

レスポンスの遅い応答を返すデバック用サーバがほしかったので、
Tornadoで作ってみました。

Tornado は、 URLパターン中に正規表現を入れると、リクエストハンドラーへリクエスト引数として渡すことができます。

class himote_check_handler(tornado.web.RequestHandler):
  # ([0-9]+)にマッチする箇所が、 uidとして渡される
  def get(self, uid):
    response_json = "{'mote_event_avg': %2.11f, 'user_id': %s}"
    # response delay
    uid_val = int(uid)
    if uid_val > 6000:
      os.system('sleep %d' % (uid_val / 1000))
    # response json format
    self.write(response_json % (10.0/3.0, uid))

application = tornado.web.Application([
  (r"/", MainHandler),
  # uidを引数で渡す
  (r"/atnd/uid/([0-9]+)", himote_check_handler),
])

全体のサンプル

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

class MainHandler(tornado.web.RequestHandler):
  def get(self):
    self.write("Hello, world")

class himote_check_handler(tornado.web.RequestHandler):
  def get(self, uid):
    response_json = "{'mote_event_avg': %2.11f, 'user_id': %s}"
    # response delay
    uid_val = int(uid)
    if uid_val > 6000:
      os.system('sleep %d' % (uid_val / 1000))
    # response json format
    self.write(response_json % (10.0/3.0, uid))

application = tornado.web.Application([
  (r"/", MainHandler),
  (r"/atnd/uid/([0-9]+)", himote_check_handler),
])

def main():
  http_server = tornado.httpserver.HTTPServer(application)
  http_server.listen(8888)
  tornado.ioloop.IOLoop.instance().start()

if __name__ == "__main__":
  main()


和訳のおかげで簡単にできました。
http://tornado.shibu.jp/index.html


現在のポスト数 56 / 100