iT邦幫忙

2019 iT 邦幫忙鐵人賽

DAY 16
0
Modern Web

三十天全端學習:透過javascript(Onsen UI)、python(tornado)、非關聯式資料庫(mongoDB)完成全端學習,建置web app、mobile app。系列 第 16

三十天全端學習(javascript、python、mongoDB)---第十六天:python tornado後台架設 (II)

https://ithelp.ithome.com.tw/upload/images/20181024/20102269DVdsTicbrx.jpg

第十六天:python tornado後台架設 (II)

tornado架設的部分,會以打帶跑的方式進行,何謂打帶跑,就是做 -> 說明為何做,抑或說做了就知道為什麼。


前提概要

day15帶大家了解tornado基本的框架概念,以及第一個tornado範例程式。


本文概要

今天帶大家了解一下同步與非同步的概念、iter反覆運算器的使用、自訂反覆運算器yield()的使用。
今天的程式碼也會上傳到github 中。


正文開始

就直接上範例吧,從模仿開始學:

1. 了解同步/非同步

#檔案名稱: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跳過,等連線成功再去回來執行程式碼。

2. for迴圈與yield (I)--- 複習python idle調適

下列程式碼是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的使用,結果會如下圖:
https://ithelp.ithome.com.tw/upload/images/20181024/201022692rZy2mquXw.png

開啟python idle修正:
https://ithelp.ithome.com.tw/upload/images/20181024/20102269lr4S4Qmi9W.png

3. for迴圈與yield (II) --- 了解yied的使用 1

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 。

4. for迴圈與yied (III) --- 了解yield的使用 2

透過上述的程式碼,知道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)

小作業:有發現出什麼嗎?有哪些差異?

參考資料

  1. tornado官方文件
    看官方文件是最好的,資料跟程式碼都是新的。
  2. 一次搞定:所有Python Web框架開發百科全書 最完整Python Web框架,包括Django、Flask、Tornado、Twisted等
    這本書整體架構內容都寫得不錯,不過是使用python2.7去撰寫,所以再購入的人,需要有一定基礎的python知識,才有辦法將書中的程式碼運用在python 3上面。不考慮程式碼的版本新舊,這本書是一本非常實用的好書,也可以當作練功,將書中的程式碼試著轉換成最新的python 3版本。

小結

今天就先帶大家到這邊,請各位熟悉一下同步/非同步的差異,還有yield的用法。


上一篇
三十天全端學習(javascript、python、mongoDB)---第十五天:python tornado後台架設 (I)
下一篇
三十天全端學習(javascript、python、mongoDB)---第十七天: python tornado後台架設---實戰篇 I
系列文
三十天全端學習:透過javascript(Onsen UI)、python(tornado)、非關聯式資料庫(mongoDB)完成全端學習,建置web app、mobile app。30

尚未有邦友留言

立即登入留言