實戰篇開始的首圖,開始不一樣了,黑修斯是每天都會反省的人,因為靈感總在深夜時,深夜時刻總是文思泉湧,好像廢話多了,反思一下,其實程式是從有價購的實作去學習更好,高效的學習是高效的輸入與輸出,才能獲得最好的學習經驗。
所以請大家真的要好好實作。
day16
介紹了yeild的用法,主要是讓大家了解非阻塞式的I/O用法,或說非同步的用法。
實戰中學習tornado程式碼架構與呈現出的網頁。
今天的程式碼也會上傳到github 中。
程式碼協同? 一般人可能會很陌生,程式碼協同 主要用在非阻塞式的架構,更簡單來說,當你的伺服器有
一百萬人
同時要存取,你的程式碼不可以讓大家等,阻塞了通道,因此需要協同函式,當結果處理完畢再啟用連接通道,避免大家塞車。
舉個栗子
:
非同步 就像是我們大家去買麥當勞,都是點完餐拿號碼牌,去旁邊等餐。
同步 就是 今天麥當勞改策略了,第一個客人的餐點從點餐、製作到出餐到我們手上,你都必須在櫃檯前等,直到你要的東西好了,才可以走,那這個時候,後面的人想點餐要等很久,而櫃檯已經幫你點好餐了,卻要跟你一起在櫃檯前等,浪費時間。
所以,你的網站應該是要想非同步的狀況一樣,讓所有人都可以在櫃檯(前台)快速點餐(要求資料),等到廚房後場(後台)將餐點製作完成(接收資料請求並處理資料完成),再透過前台跟你說餐點好了,可以取餐了。是比較理想的狀況。
程式碼放在github , day17/day17_ex1.py
以下範例是,對IT邦網站做請求的動作,如果連接成功,會返回網站內容,若是錯誤,會有我們定義的網站錯誤代碼:500。
紅色號球1
:定義的類別繼承了tornado的web.RequestHandler。
紅色號球2
:上面加載了@tornado.web.asynchronous 裝飾器(@),宣告為非同步程序,多載get()函式,對應到RequestHandler函式中的http get。
紅色號球3
:非同步案例 ,當IT邦網站載入完成,才會顯示網站,若是等待太久,或是載入錯誤,會出現我們定義的網站錯誤代碼:500,如下圖所示:
紅色號球4
:port設定為8888
執行程式後,在網址中輸入localhost:8888,會等待網站載入,如下圖:
連線錯誤會出現以下錯誤:
cmd端的程式也會出現如下錯誤訊息:
連線成功後,會如下圖:
程式碼放在github , day17/day17_ex2.py
一開始應該要先放這個給各位讀者的,不過在前幾天的文章中有介紹過了,才放在第二個練習中。
這一個標準的tornado網站程式架構:
紅色號球1
:定義的類別繼承了tornado的web.RequestHandler。
紅色號球2
:定義自己的app,內容有一個路由。紅色號球3
:定義主程序。紅色號球4
:不斷循環主程序。
最終成功後,會出現如下圖畫面:
程式碼放在github , day17/day17_ex3.py
- 試著改變不同的port,並連線測試。
- 試著改變一些結構。
可以參考 day17_ex3.py 中,我修改的地方。
請大家熟悉一下程式架構,直接從範例中學習是最快速的,熟悉了再自行變化即可。