2 回答

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