python协程练习部分代码的理解?
import asyncio
import threading
async def wget(host):
print('wget {}'.format(host))
reader, writer = await asyncio.open_connection(host,80)
header = 'GET / HTTP/1.0\r\nHost: {}\r\n\r\n'.format(host)
writer.write(header.encode('utf-8'))
await writer.drain() #?
while 1:
line = await reader.readline()
if line == b'\r\n':
break
print('{} header > {}'.format(host,line.decode('utf-8').rstrip()))
writer.close()
loop = asyncio.get_event_loop()
tasks = [wget(host) for host in ['www.sina.com.cn','www.sohu.com','www.163.com']]
loop.run_until_complete(asyncio.wait(tasks))
loop.close()
# print(help(asyncio.open_connection))
问题1:遇到await处,把控制权交给指定的协程,但如何知道这个协程什么时候能执行完成并返还控制权呢?
问题2:drain这个协程作用貌似刷新写入的缓冲区,那这个wirte具体把‘请求头数据’写入到了哪里呢?
问题3:b'\r\n'处,为什么能够判断分离header和body数据,返回header的每一行都有换行啊,这样难道不会在打印第一条header信息后就会被break了?
才学习协程感觉代码好难理解,如果能画一张简易流程图,不胜感激啊。
相关阅读:
easyui的表格实现
angular 再通过 load 载入的页面 入口模块无法识别?
如何让子函数的传给父函数
给已有的表中添加一个自增的主键报错,麻烦大神看看~~~
树莓派网络不稳定
有什么方法能利用php监控文件夹内的文件的变化
php 中 图片如何输出多尺寸
python在向post数据时出现httplib.BadStatusLine: ''错误
NSMutableAttributedString 调解某几个字的高度用什么方法?
怎么看待网络认证?从CCNA到CCNP,为什么知识可以这样量化标准?
请问一个vagrant 端口转发问题
office2013切换中, 风和威望的效果是怎么实现的
使用UI Automation JavaScript 时怎么在工程中自定义alert.label?
hexo搭建博客部署到github pages 同时能不能一块部署到coding pages?
nginx拒绝访问
sql查询速度问题
node.js 在Windows平台怎么隐藏控制台的窗口界面
symfony怎么自定义公共函数,并且在模板中怎么调用?
localStorage如何在不同的webView之间传值
iOS如何存储图片