协程的具体使用方式是怎样的?

1 个回答

  • 柳木玄
    满心期待必有所失,人无贪念便有馈赠。
    ## 作用 在 Python 中,可以使用 `asyncio` 通过协程处理异步 TCP 通信,适合并发连接场景: - 使用 `async/await` 编写异步逻辑。 - 不需要为每个连接创建线程,资源开销更低。 - 客户端可通过 `asyncio.open_connection()` 获取 `reader` 和 `writer`。 - 服务端可通过 `asyncio.start_server()` 启动,并把协程函数作为连接处理回调。 - 程序入口使用 `asyncio.run()` 运行协程。 ## 原理 协程版本的 TCP echo 客户端基本流程如下: 1. 使用 `await asyncio.open_connection('127.0.0.1', 8888)` 建立连接,得到: - `reader`:负责读取数据; - `writer`:负责写入和发送数据。 2. 使用 `writer.write(message.encode())` 写入要发送的字节数据。 3. 使用 `await writer.drain()` 等待数据刷新到底层连接。 4. 使用 `await reader.read(100)` 异步读取服务端返回的数据。 5. 完成后调用 `writer.close()` 关闭连接,并使用 `await writer.wait_closed()` 等待连接完全关闭。 示例结构: ```python import asyncio async def tcp_echo_client(message: str) -> None: reader, writer = await asyncio.open_connection('127.0.0.1', 8888) writer.write(message.encode()) await writer.drain() data = await reader.read(100) print(data.decode()) writer.close() await writer.wait_closed() asyncio.run(tcp_echo_client('Hello World!')) ``` 服务端则使用 `asyncio.start_server()` 注册一个协程处理函数;每当有新连接进入时,事件循环会调度对应的协程处理读写,从而用单线程并发管理多个连接。
    发布于 2026-10-24 22:32 •IP属地 广西
    举报
    评论
    收藏