python的web開發(fā)框架

Tornado網(wǎng)路框架

解決10K以上的并發(fā)連接,C10K問題,設(shè)計(jì)使得其成為一個(gè)擁有非常高性能的框架。此外,它還擁有處理安全性、用戶驗(yàn)證、社交網(wǎng)絡(luò)以及與外部服務(wù)(如數(shù)據(jù)庫網(wǎng)站API)進(jìn)行異步交互的工具。

背景:Apache會為每個(gè)HTTP連接分配線程池中的一個(gè)線程,如果所有線程都被占用并尚有內(nèi)存可用時(shí),則生成一個(gè)新的線程。大多數(shù)Linux都是默認(rèn)線程堆大小為8MB,大負(fù)載下,維護(hù)一個(gè)大的線程池等待數(shù)據(jù)極易迅速消耗服務(wù)器的內(nèi)存資源。

Tornado采用了單線程事件循壞的方式,因此所有應(yīng)用程序的代碼都要采異步和非阻塞的方式。

異步是指在結(jié)束之前就會返回。幾種不同類型的異步接口:

回調(diào)參數(shù)(Callback argument)

返回一個(gè)站位符(Return a placeholder)

發(fā)送到一個(gè)隊(duì)列(Deliver to a queue)

回調(diào)注冊表(Callback registry)

Tornado推薦使用協(xié)程來寫異代碼,協(xié)程通過使用python的yield關(guān)鍵字來代替鏈?zhǔn)秸{(diào)用從而掛起和恢復(fù)進(jìn)程。用協(xié)程方式寫的代碼就跟同步代碼一樣卻沒有像同步一樣浪費(fèi)一個(gè)線程,通過減少上下文切換,協(xié)程使得并發(fā)更加容易。

一個(gè)tornado應(yīng)用總是會包含一個(gè)或多個(gè)RequestHandler的子類、一個(gè)將請求傳入Handler的Application對象和一個(gè)用來啟動(dòng)應(yīng)用的main()函數(shù)。

Application對象

RequestHandler的子類? -- 在一個(gè)Handler中,我們通過調(diào)用render(),write()等函數(shù)來作為請求的響應(yīng)。render()返回一個(gè)template網(wǎng)頁和一系列相關(guān)參數(shù)給客戶端;write()直接返回字符串、字節(jié)碼、字典(作為JSON數(shù)據(jù))。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容