1. 程式人生 > 實用技巧 >Tornado 應用筆記01 簡介

Tornado 應用筆記01 簡介

筆者因為工作的原因接觸到Tornado(/tɔrˈneɪdoʊ/, 龍捲風), 在學習的過程中參考不少文章, 雖然其中不乏優秀的文章, 但是內容大都是碎片化的, 缺少系統性, 而且不少關於非同步應用的內容還是基於過時的舊版本. 因此打算將學習和開發過程中的記錄整理成筆記, 即為了方便自己日後查閱, 也希望能夠幫助到和我一樣的Tornado的學習者, 於是就有了這個Tornado應用筆記. (注: 文章的程式碼都是基於Tornado 4.4+Python 2.7的, 不過只要你的版本不是特別老舊, 都是可以正常執行的. 另外, 文章並不是為初學者準備的, 閱讀前要需要確認你已經瞭解Python語法, HTTP協議等Web開發所需的基礎知識)

在Python Web框架中, 最為人熟知的三個是Django, FlaskTornado, 前兩者是一重一輕的同步框架, 而後者則是以高效能著稱的非同步框架. 在使用Tornado的開發團隊中, Quara知乎是最常被提起的(參考: How-does-Quora-use-Tornado知乎使用了哪些框架和開源庫?).

我想在正文開始之前, 需要說明的是, 請不要迷信框架所謂的"高效能", 框架的作用是讓開發者更快速和便捷的構建起所需的應用, 而效能則是由包括系統架構和開發人員能力在內的諸多因素決定的. 況且, 在高效能伺服器價格相較開發人員的薪資"不值一提"和"面向上線時間程式設計"的今天, 過度追求高效能, 恐怕只會弊大於利. 倘若你將Tornado作為一個同步框架使用, 並認為框架能夠"自主"實現高效能的話, 那我可真是無FUCK說了. 說到這裡又不得不提

Instagram 在 PyCon 2017 的演講摘要, 其中分享了Instagram用一個以"慢"著稱的Django構建一個支撐著7億月活躍使用者應用的故事.

首先來看Tornado的介紹(譯自官方文件, 有刪減):

Tornado是一個Python Web框架兼非同步網路庫, 最初由FriendFeed開發. 得益於非阻塞網路I/O, Tornado可以支撐起數以萬計的連線, 因此它很非常適合開發長輪詢, WebSockets和那些需要與每個使用者建立持久連線的應用.

Tornado包含以下四大模組:

  • Web框架
  • HTTP伺服器和客戶端
  • 非同步網路庫
  • 協程庫

Tornado的Hello World

.

# -*- coding: utf-8 -*-
# file: hello.py
 
import tornado.ioloop
import tornado.web
 
 
# 定義一個路由類, 只能處理get請求, 請求返回"Hello Tornado!"
class MainHandler(tornado.web.RequestHandler):
    def get(self):
        self.write("Hello Tornado!")
 
 
# 建立一個app, 並註冊路由
def make_app():
    return tornado.web.Application([
        (r"/", MainHandler),
    ])
 
 
if __name__ == "__main__":
    # 獲取版本資訊, 最好還是4.2及以上的版本
    print 'Tornado version is <%s>' % tornado.version
    app = make_app()
    # 監聽本地8888埠
    app.listen(8888)
    print 'Tornado server is running at localhost:8888'
    # 暫時不需要關心下面語句的細節, 只需要知道其作用就是啟動服務
    tornado.ioloop.IOLoop.current().start()  
 

執行以後, 在瀏覽器訪問localhost:8888, 就能看到Hello Tornado! 是的, 這個簡單的示例並沒有用到任何非同步功能, 就是一個最基礎的阻塞應用.

本節內容就是這些, 下節內容將分析Web框架中常用的套路.

標籤:Tornado Python