扫码关注官方订阅号
闭关修行中......
这段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的主循环
tornado.ioloop.IOLoop.instance().start()
tornado
listen
访问了之后产生了io阻塞, 就先打印了here 然后请求的内容返回。。 最后一行是启动ioloop 监听。
生成器协议提供一个 调用者和生成器之前的通讯方法,可以影响后面的操作, 生成器必须调用next 开始一个生成器
微信扫码关注PHP中文网服务号
QQ扫码加入技术交流群
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号
PHP学习
技术支持
返回顶部
这段code的执行过程:
tornado.ioloop.IOLoop.instance().start()
是tornado
开启网络listen
的主循环访问了之后产生了io阻塞, 就先打印了here 然后请求的内容返回。。 最后一行是启动ioloop 监听。
生成器协议提供一个 调用者和生成器之前的通讯方法,可以影响后面的操作, 生成器必须调用next 开始一个生成器