Python之数据流(stream)
大家好!我是晨晨💓
希望大家多多支持我!
为了感谢每一个关注我的小可爱:💓文章留言“学习”即可获取晨晨精心准备的学习大礼包书籍教程,都是无偿分享滴💓
最后——如果文章有帮助到你,记得“关注”、“点赞”、“评论”三连哦~
————————————————
本文参考Python官方文档:https://docs.python.org/zh-cn/3.8/library/asyncio-stream.html#examples
本文参考Python官方文档针对官方文档示例进行解析,解析不完整只为了便于理解
流
流是用于处理网络连接的高级async/await-ready原语。流允许发送和接收数据,而不需要使用回调或低级协议和传输。
Stream函数
下面的高级 asyncio 函数可以用来创建和处理流:coroutine asyncio.
open_connection
(host=None, port=None, *, loop=None, limit=None, ssl=None, family=0, proto=0, flags=0, sock=None, local_addr=None, server_hostname=None, ssl_handshake_timeout=None)
建立网络连接并返回一对 (reader, writer)
对象。
返回的 reader 和 writer 对象是 StreamReader
和 StreamWriter
类的实例。
注意:使用ayncio.open_connection()方法创建和处理流时只有在await时才返回reader和writer对象
为了方便测试我们在本地搭建一个nginx服务器,首页index.html内容为“Hello World”
示例:
import asyncio
async def wget(host):
connect = asyncio.open_connection(host,80)
print(type(connect))
reader,writer = await connect
print(type(reader),type(writer))
async def main():
# 获取表头主机列表
hosts = ['192.168.1.100']
# 根据主机列表获取一个tasks列表
tasks = [asyncio.create_task(wget(host)) for host in hosts]
# 等待任务列表执行结果
await asyncio.gather(*tasks)
# 运行
asyncio.run(main()
运行输出如下:
<class 'coroutine'>
<class 'asyncio.streams.StreamReader'> <class 'asyncio.streams.StreamWriter'>
Exception ignored in: <function _ProactorBasePipeTransport.__del__ at 0x00000236AA956F70>
Traceback (most recent call last):
File "C:\ProgramData\Anaconda3\lib\asyncio\proactor_events.py", line