【tornado模塊】python
web
- FriendFeed 使用的基礎 Web 框架,包含了 Tornado 的大多數重要的功能escape
- XHTML, JSON, URL 的編碼/解碼方法database
- 對 MySQLdb
的簡單封裝,使其更容易使用template
- 基於 Python 的 web 模板系統httpclient
- 非阻塞式 HTTP 客戶端,它被設計用來和 web
及 httpserver
協同工做auth
- 第三方認證的實現(包括 Google OpenID/OAuth、Facebook Platform、Yahoo BBAuth、FriendFeed OpenID/OAuth、Twitter OAuth)locale
- 針對本地化和翻譯的支持options
- 命令行和配置文件解析工具,針對服務器環境作了優化httpserver
- 服務於 web
模塊的一個很是簡單的 HTTP 服務器的實現iostream
- 對非阻塞式的 socket 的簡單封裝,以方便經常使用讀寫操做ioloop
- 核心的 I/O 循環其餘模塊ios
autoreloadgit
#!/bin/env python import tornado.httpserver import tornado.ioloop import tornado.options import tornado.web import tornado.httpclient import time from tornado.options import define, options define("port", default=8000, help="run on the given port", type=int) class SleepHandler(tornado.web.RequestHandler): def get(self): time.sleep(20) self.write("when i sleep 5s") class JustNowHandler(tornado.web.RequestHandler): def get(self): self.write("i hope just now see you") if __name__ == "__main__": tornado.options.parse_command_line() app = tornado.web.Application(handlers=[ (r"/sleep", SleepHandler), (r"/justnow", JustNowHandler)]) http_server = tornado.httpserver.HTTPServer(app) http_server.listen(options.port) tornado.ioloop.IOLoop.instance().start()
在瀏覽器中,前後請求/sleep和/justnow,發現justnow要等到/sleep返回後纔有返回github
[I 160621 20:54:27 web:1811] 304 GET /sleep (172.22.177.51) 20019.97ms
[I 160621 20:54:27 web:1811] 304 GET /justnow (172.22.177.51) 0.33msweb
class SleepHandler(tornado.web.RequestHandler): @tornado.web.asynchronous def get(self): tornado.ioloop.IOLoop.instance().add_timeout(time.time() + 5, callback=self.on_response) def on_response(self): self.write("when i sleep 5s") self.finish()
使用@tornado.web.asynchonous裝飾器時,Tornado永遠不會本身關閉鏈接,須要顯式的self.finish()關閉,瀏覽器
tornado.gen.coroutine裝飾器, coroutine是3.0以後新增的裝飾器,讓咱們經過yield實現一樣的效果服務器
#!/bin/env python import tornado.httpserver import tornado.ioloop import tornado.options import tornado.web import tornado.gen import tornado.httpclient import tornado.concurrent import tornado.ioloop import time from tornado.options import define, options define("port", default=8000, help="run on the given port", type=int) class SleepHandler(tornado.web.RequestHandler): @tornado.web.asynchronous @tornado.gen.coroutine def get(self): yield tornado.gen.Task(tornado.ioloop.IOLoop.instance().add_timeout, time.time() + 5) self.write("when i sleep 5s") class JustNowHandler(tornado.web.RequestHandler): def get(self): self.write("i hope just now see you") if __name__ == "__main__": tornado.options.parse_command_line() app = tornado.web.Application(handlers=[ (r"/sleep", SleepHandler), (r"/justnow", JustNowHandler)]) http_server = tornado.httpserver.HTTPServer(app) http_server.listen(options.port) tornado.ioloop.IOLoop.instance().start()