Python之数据流(stream)

本文基于Python官方文档解析asyncio-stream,介绍如何使用stream处理网络连接。通过示例展示了如何建立TCP回显客户端和服务器,解释了如何通过reader和writer对象发送和接收数据,包括发送GET请求并接收响应。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

大家好!我是晨晨💓
希望大家多多支持我!
为了感谢每一个关注我的小可爱:💓文章留言“学习”即可获取晨晨精心准备的学习大礼包书籍教程,都是无偿分享滴💓
最后——如果文章有帮助到你,记得“关注”、“点赞”、“评论”三连哦~
————————————————

本文参考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 对象是 StreamReaderStreamWriter 类的实例。

注意:使用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 
### Python Stream 流处理的使用方法与示例 #### 什么是Stream流? 在Python中,`stream`通常指的是数据流的概念。它可以表示文件、网络套接字或其他形式的输入/输出源[^1]。对于TCP/IP通信中的流模式,它是基于TCP协议的一种面向连接的数据传输方式,能够提供可靠性和顺序保障[^3]。 --- #### Stream流的基本操作 在Python中,可以利用内置库如`socket`模块来实现基于TCP的流式通信。以下是一些基本的操作: - **创建Socket对象**:用于初始化客户端或服务器端。 - **绑定地址和监听请求**(仅限服务器端):等待来自客户端的连接请求。 - **接受连接并收发数据**:通过已建立的连接读取或写入数据。 这些功能可以通过标准库轻松实现。 --- #### TCP回显服务器示例 下面是一个简单的TCP回显服务器的实现,展示了如何使用流的方式接收和返回数据给客户端。 ```python import socket def start_server(host='localhost', port=65432): with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s: s.bind((host, port)) s.listen() conn, addr = s.accept() # 接受连接 with conn: print(f'Connected by {addr}') while True: data = conn.recv(1024) # 接收数据 if not data: break conn.sendall(data) # 将收到的数据原样返回 start_server() ``` 上述代码实现了最基本的TCP服务器逻辑,其中`recv()`函数用来从客户端获取数据,而`sendall()`则负责将相同的数据反馈回去。 --- #### TCP回显客户端示例 对应的客户端程序也非常简单,只需指定目标主机名以及端口号即可发起连接,并发送消息到服务端再打印响应结果。 ```python import socket def send_message_to_server(message, host='localhost', port=65432): with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s: s.connect((host, port)) # 连接到服务器 s.sendall(message.encode()) # 发送编码后的字符串 response = s.recv(1024).decode() # 获取解码后的回复 return response response = send_message_to_server('Hello, Server!') print(response) ``` 此脚本会尝试联系本地运行的服务实例并向其传递一条问候语句;随后展示由对方传回来的内容。 --- #### Deepstream 的应用案例 除了基础的TCP流之外,在某些特定领域比如视频分析方面也有更高级别的框架可供选用,例如NVIDIA提供的DeepStream SDK就支持高效处理大规模实时多媒体流的任务。如果想进一步探索这类技术,则可参考官方文档学习如何构建自己的应用程序[^2]。 例如启动测试项目命令如下: ```bash python deepstream_test_1.py video.h264 ``` 这表明我们可以借助专门设计好的工具集快速搭建起具备强大性能表现的应用场景解决方案。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值