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
的主循环
添加回答
举报