tornado架設的部分,會以打帶跑的方式進行,何謂打帶跑,就是做 -> 說明為何做,抑或說做了就知道為什麼。
day15
帶大家了解tornado基本的框架概念,以及第一個tornado範例程式。
今天帶大家了解一下同步與非同步的概念、iter反覆運算器的使用、自訂反覆運算器yield()的使用。
今天的程式碼也會上傳到github 中。
就直接上範例吧,從模仿開始學:
#檔案名稱:day16_1
from tornado.httpclient import HTTPClient
from tornado.httpclient import AsyncHTTPClient
#同步I/O操作展示
def synshow():
http_client = HTTPClient()
response = http_client.fetch("https://ithelp.ithome.com.tw/")
#阻塞發生
print (response)
print ("hello,這是同步阻塞的狀況,我已經跟IT邦網站連線了")
#非同步展示
def asynshow():
http_client = AsyncHTTPClient()
http_client.fetch("https://ithelp.ithome.com.tw/",callback = test())
print ("hello,這是非同步的狀況,我已經跟IT邦網站連線了")
def test():
print("ok,你好,我是非同步")
#請自行註解 synshow 和 asynshow,個別比較差異
#synshow()
asynshow()
這邊請各位,去執行程式碼,並比較同步與非同步的差異性,只要將synshow()或asynshow(),其中之一註解,執行單個即可。
連線的網站都是IT邦,同步的function速度會比較慢,而非同步的function跳過,等連線成功再去回來執行程式碼。
下列程式碼是python for迴圈的應用之一,使用語法這邊不說,請讀者自行去了解python for的語法。
程式碼中有使用到iter()
反覆運算器,其功能就像是下面程式碼中的 for x in range(5).....的元素集合。
執行以下程式碼:
#檔案名稱:day16_2
#練習使用idle除錯
for x in range(5):
print(x)
num = [1,2,3,4,5]
y = iter(num)
tt = iter(range(5))
#這邊會出現錯誤,試著修正。
print (tt.next())
中途會出現錯誤,請將之修正,順帶複習python idle的使用,結果會如下圖:
開啟python idle修正:
yield方法就是自訂自己的iter,可以想像成元素集,如 x=[1,2,3,4,5]
請先執行下列程式碼:
#檔案名稱:day16_3
#yield 使用
def yield_show():
print ("我是1號")
yield 1
print ("我是8號")
yield 8
print ("我是5號")
yield 5
for i in yield_show():
print (i)
上述程式碼的類似流程控制,會照順序印出 yield 。
透過上述的程式碼,知道yield透過for迴圈可以印出,而且是照順序的。
下面我們在 yield 8
前在加入一些話,試試看?!
#檔案名稱:day16_4
#yield 使用II
def yield_show():
print ("我是1號")
yield 1
print ("我是8號")
print ("等一下,我是day16_4的範例")
yield 8
print ("我是5號")
yield 5
for i in yield_show():
print (i)
小作業:有發現出什麼嗎?有哪些差異?
- tornado官方文件
看官方文件是最好的,資料跟程式碼都是新的。- 一次搞定:所有Python Web框架開發百科全書 最完整Python Web框架,包括Django、Flask、Tornado、Twisted等
這本書整體架構內容都寫得不錯,不過是使用python2.7去撰寫,所以再購入的人,需要有一定基礎的python知識,才有辦法將書中的程式碼運用在python 3上面。不考慮程式碼的版本新舊,這本書是一本非常實用的好書,也可以當作練功,將書中的程式碼試著轉換成最新的python 3版本。
今天就先帶大家到這邊,請各位熟悉一下同步/非同步的差異,還有yield的用法。