Python框架之Tornado(概述)

本系列博文計劃:

  1接剩、剖析基于Python的Web框架Tornado的源碼皆警,為何要閱讀源碼枣氧?

Tornado 由前 google 員工開發(fā)溢十,代碼非常精練,實現(xiàn)也很輕巧达吞,加上清晰的注釋和豐富的 demo张弛,我們可以很容易的閱讀分析 tornado. 通過閱讀 Tornado 的源碼,你將學到:

理解 Tornado 的內(nèi)部實現(xiàn)酪劫,使用 tornado 進行 web 開發(fā)將更加得心應(yīng)手吞鸭。

如何實現(xiàn)一個高性能,非阻塞的 http 服務(wù)器覆糟。

如何實現(xiàn)一個 web 框架刻剥。

各種網(wǎng)絡(luò)編程的知識,比如 epoll

python 編程的絕佳實踐

視頻分享鏈接:

https://study.163.com/course/introduction/1209485881.htm?share=2&shareId=400000000535031

https://study.163.com/course/introduction/1209407824.htm?share=2&shareId=400000000535031

https://study.163.com/course/introduction/1209401891.htm?share=2&shareId=400000000535031

在tornado的子目錄中滩字,每個模塊都應(yīng)該有一個.py文件造虏,你可以通過檢查他們來判斷你是否從已經(jīng)從代碼倉庫中完整的遷出了項目御吞。在每個源代碼的文件中,你都可以發(fā)現(xiàn)至少一個大段落的用來解釋該模塊的doc string漓藕,doc string中給出了一到兩個關(guān)于如何使用該模塊的例子陶珠。

  2、為Python開發(fā)一個完善的MVC框架

  首先將帶著大家一起來剖析基于python編寫的Web框架 tornado 享钞,本著易讀易懂的目標來寫這一系列揍诽,寄希讓小白也能zeng明白其中的道理,與其說剖析還不如說是白話栗竖,因為本系列都會用通俗的語言去描述Web框架中的各個知識點寝姿。

概述

Tornado?是?FriendFeed?使用的可擴展的非阻塞式 web 服務(wù)器及其相關(guān)工具的開源版本。這個 Web 框架看起來有些像web.py?或者?Google 的 webapp划滋,不過為了能有效利用非阻塞式服務(wù)器環(huán)境,這個 Web 框架還包含了一些相關(guān)的有用工具 和優(yōu)化埃篓。

Tornado 和現(xiàn)在的主流 Web 服務(wù)器框架(包括大多數(shù) Python 的框架)有著明顯的區(qū)別:它是非阻塞式服務(wù)器处坪,而且速度相當快。得利于其 非阻塞的方式和對epoll的運用架专,Tornado 每秒可以處理數(shù)以千計的連接同窘,這意味著對于實時 Web 服務(wù)來說,Tornado 是一個理想的 Web 框架部脚。我們開發(fā)這個 Web 服務(wù)器的主要目的就是為了處理 FriendFeed 的實時功能 ——在 FriendFeed 的應(yīng)用里每一個活動用戶都會保持著一個服務(wù)器連接想邦。(關(guān)于如何擴容 服務(wù)器,以處理數(shù)以千計的客戶端的連接的問題委刘,請參閱C10K problem丧没。)

下載安裝:

1

2

3

pip3 install tornado

源碼安裝

https://pypi.python.org/packages/source/t/tornado/tornado-4.3.tar.gz

Tornado模塊分類

1. Core web framework

tornado.web — 包含web框架的大部分主要功能,包含RequestHandler和Application兩個重要的類

tornado.httpserver — 一個無阻塞HTTP服務(wù)器的實現(xiàn)

tornado.template — 模版系統(tǒng)

tornado.escape — HTML,JSON,URLs等的編碼解碼和一些字符串操作

tornado.locale — 國際化支持

2. Asynchronous networking 底層模塊

tornado.ioloop — 核心的I/O循環(huán)

tornado.iostream — 對非阻塞式的 socket 的簡單封裝锡移,以方便常用讀寫操作

tornado.httpclient — 一個無阻塞的HTTP服務(wù)器實現(xiàn)

tornado.netutil — 一些網(wǎng)絡(luò)應(yīng)用的實現(xiàn)呕童,主要實現(xiàn)TCPServer類

3. Integration with other services

tornado.auth — 使用OpenId和OAuth進行第三方登錄

tornado.database — 簡單的MySQL服務(wù)端封裝

tornado.platform.twisted — 在Tornado上運行為Twisted實現(xiàn)的代碼

tornado.websocket — 實現(xiàn)和瀏覽器的雙向通信

tornado.wsgi — 與其他python網(wǎng)絡(luò)框架/服務(wù)器的相互操作

4. Utilities

tornado.autoreload — 生產(chǎn)環(huán)境中自動檢查代碼更新

tornado.gen — 一個基于生成器的接口,使用該模塊保證代碼異步運行

tornado.httputil — 分析HTTP請求內(nèi)容

tornado.options — 解析終端參數(shù)

tornado.process — 多進程實現(xiàn)的封裝

tornado.stack_context — 用于異步環(huán)境中對回調(diào)函數(shù)的上下文保存淆珊、異常處理

tornado.testing — 單元測試

框架使用

寫一個hello,world:

?

?

#!/usr/bin/env python

# -*- coding:utf-8 -*-


import tornado.ioloop

import tornado.web



class MainHandler(tornado.web.RequestHandler):

? ? def get(self):

? ? ? ? self.write("Hello, world")


application = tornado.web.Application([

? ? (r"/index", MainHandler),

])



if __name__ == "__main__":

? ? application.listen(8888)

? ? tornado.ioloop.IOLoop.instance().start()

?

第一步:執(zhí)行腳本夺饲,監(jiān)聽 8888 端口

第二步:瀏覽器客戶端訪問 /index ?--> ?http://127.0.0.1:8888/index

第三步:服務(wù)器接受請求,并交由對應(yīng)的類處理該請求

第四步:類接受到請求之后施符,根據(jù)請求方式(post / get / delete ...)的不同調(diào)用并執(zhí)行相應(yīng)的方法

第五步:方法返回值的字符串內(nèi)容發(fā)送瀏覽器

由上述分析往声,我們將整個Web框架分為兩大部分:

待請求階段,即:創(chuàng)建服務(wù)端socket并監(jiān)聽端口

處理請求階段戳吝,即:當有客戶端連接時浩销,接受請求,并根據(jù)請求的不同做出相應(yīng)的相應(yīng)

那么在記下來的博文中將按照這兩種分類來進行剖析...

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末骨坑,一起剝皮案震驚了整個濱河市撼嗓,隨后出現(xiàn)的幾起案子柬采,更是在濱河造成了極大的恐慌,老刑警劉巖且警,帶你破解...
    沈念sama閱讀 218,204評論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件粉捻,死亡現(xiàn)場離奇詭異,居然都是意外死亡斑芜,警方通過查閱死者的電腦和手機肩刃,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,091評論 3 395
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來杏头,“玉大人盈包,你說我怎么就攤上這事〈纪酰” “怎么了呢燥?”我有些...
    開封第一講書人閱讀 164,548評論 0 354
  • 文/不壞的土叔 我叫張陵,是天一觀的道長寓娩。 經(jīng)常有香客問我叛氨,道長,這世上最難降的妖魔是什么棘伴? 我笑而不...
    開封第一講書人閱讀 58,657評論 1 293
  • 正文 為了忘掉前任寞埠,我火速辦了婚禮,結(jié)果婚禮上焊夸,老公的妹妹穿的比我還像新娘仁连。我一直安慰自己,他們只是感情好阱穗,可當我...
    茶點故事閱讀 67,689評論 6 392
  • 文/花漫 我一把揭開白布饭冬。 她就那樣靜靜地躺著,像睡著了一般揪阶。 火紅的嫁衣襯著肌膚如雪伍伤。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,554評論 1 305
  • 那天遣钳,我揣著相機與錄音扰魂,去河邊找鬼。 笑死蕴茴,一個胖子當著我的面吹牛劝评,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播倦淀,決...
    沈念sama閱讀 40,302評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼蒋畜,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了撞叽?” 一聲冷哼從身側(cè)響起姻成,我...
    開封第一講書人閱讀 39,216評論 0 276
  • 序言:老撾萬榮一對情侶失蹤插龄,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后科展,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體均牢,經(jīng)...
    沈念sama閱讀 45,661評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,851評論 3 336
  • 正文 我和宋清朗相戀三年才睹,在試婚紗的時候發(fā)現(xiàn)自己被綠了徘跪。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 39,977評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡琅攘,死狀恐怖垮庐,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情坞琴,我是刑警寧澤哨查,帶...
    沈念sama閱讀 35,697評論 5 347
  • 正文 年R本政府宣布,位于F島的核電站剧辐,受9級特大地震影響解恰,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜浙于,卻給世界環(huán)境...
    茶點故事閱讀 41,306評論 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望挟纱。 院中可真熱鬧羞酗,春花似錦、人聲如沸紊服。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,898評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽欺嗤。三九已至参萄,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間煎饼,已是汗流浹背讹挎。 一陣腳步聲響...
    開封第一講書人閱讀 33,019評論 1 270
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留吆玖,地道東北人筒溃。 一個月前我還...
    沈念sama閱讀 48,138評論 3 370
  • 正文 我出身青樓,卻偏偏與公主長得像沾乘,于是被迫代替她去往敵國和親怜奖。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 44,927評論 2 355

推薦閱讀更多精彩內(nèi)容

  • 簡介 Tornado龍卷風是一個開源的網(wǎng)絡(luò)服務(wù)器框架翅阵,它是基于社交聚合網(wǎng)站FriendFeed的實時信息服務(wù)開發(fā)而...
    JunChow520閱讀 54,030評論 4 46
  • 事件驅(qū)動編程 事件驅(qū)動編程是一種網(wǎng)絡(luò)編程范式歪玲,程序的執(zhí)行流由外部事件來決定迁央,特點是包含一個事件循環(huán),當外部事件發(fā)生...
    JunChow520閱讀 3,813評論 0 1
  • 官方文檔中文文檔Tornado概覽淺談Python Web 框架:Django, Twisted, Tornado...
    一只寫程序的猿閱讀 41,935評論 7 50
  • 1滥崩,簡介 Tornado全稱Tornado Web Server岖圈,是一個用Python語言寫成的Web服務(wù)器兼We...
    曉可加油閱讀 1,315評論 0 2
  • 其中Tornado的定義是 Web 框架和異步網(wǎng)絡(luò)庫,其中他具備有異步非阻塞能力夭委,能解決他兩個框架請求阻塞的問題幅狮,...
    HappyOn閱讀 2,148評論 2 5