2 回答

TA貢獻(xiàn)1824條經(jīng)驗 獲得超8個贊
這段code的執(zhí)行過程:
gen = fetch() # 創(chuàng)建一個生成器函數(shù)
f = gen.next() # 調(diào)用生成器函數(shù),返回 yield 后面的函數(shù),即經(jīng)過partial包裝的 AsyncHTTPClient。
# 可以理解返回AsyncHTTPClient函數(shù)。
f(callback) # 執(zhí)行f函數(shù),也就是執(zhí)行 AsyncHTTPClient,
# AsyncHTTPClient函數(shù)包含一個系統(tǒng)異步IO調(diào)用。AsyncHTTPClient注冊了回調(diào)函數(shù),
# 當(dāng)異步IO完畢,調(diào)用回調(diào)callback。
print 'here' # 打印
# 注意 :callback是異步調(diào)用的回調(diào),因此無法確定是在print之前還是之后執(zhí)行。
# 通常而言,網(wǎng)絡(luò)IO會比計算慢,因此絕大多數(shù)情況下先執(zhí)行print,然后才調(diào)用callback,
# 注意是callback,不是f,f早就執(zhí)行了。
# 執(zhí)行callback的時候,通過生成器 gen.send(response),將結(jié)果返回給fetch的response。
# 也就是可以理解此時的 yield 等價于 response = return callback()
tornado.ioloop.IOLoop.instance().start()
是tornado
開啟網(wǎng)絡(luò)listen
的主循環(huán)
添加回答
舉報