You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何异步发送socket?现有同步Python socket代码如何实现异步收发?

异步Socket发送接收实现方案

你可以直接使用Python标准库自带的asyncio异步IO框架实现,不需要引入第三方依赖,改写后的代码逻辑和你原有的同步逻辑完全对齐:

import asyncio
import json
import logging

async def send_request():
    # 对应原代码的socket创建+connect逻辑
    reader, writer = await asyncio.open_connection("127.0.0.1", 8001)

    message = json.dumps({
        "wave-file": '/home/s41140/projects/python/asynchronous/wav/converted_1635659734733081.wav',
        "text": "hello".upper(),
    }) + '\n'

    logging.info('Just before sending to tcp socket, message: {}'.format(message))
    
    # 异步发送数据
    writer.write(message.encode())
    # 等待数据完全写入缓冲区
    await writer.drain()

    # 异步读取一行响应,对应原sockfile.readline()逻辑
    line = await reader.readline()
    print(line.decode())

    # 关闭连接
    writer.close()
    await writer.wait_closed()

# 运行异步协程
if __name__ == "__main__":
    asyncio.run(send_request())
  • 上述代码兼容Python 3.7及以上版本,如果你要实现同时发起多个并发请求,只需要创建多个协程任务用asyncio.gather统一调度即可,不会出现同步代码阻塞等待的问题
  • 如果你需要更稳定的连接管理,可以给连接加超时参数,在asyncio.open_connection时传入timeout参数即可,避免连接长时间挂死
  • 所有IO操作(连接、读、写)都已经是异步非阻塞的,不会占用CPU等待网络返回,适合高并发场景使用

内容的提问来源于stack exchange,提问作者sajjad alizade

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.25 06:06:07