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

Python asyncio循环中如何实现异步调用无需等待前次操作完成

异步并发连接实现方案

修改要求结论

  • connect_to_server和外层的主执行函数都需要改为异步实现
  • 不要在循环内直接await单个连接任务,统一等待所有任务执行的环节才需要使用await

现有代码问题说明

你当前编写的代码依然是串行执行的,存在两个核心问题:

  1. 循环内直接写await connect_to_server(client),每次迭代都会阻塞等待本次连接完成,才会进入下一次迭代启动新连接,本质和原来的同步循环没有区别
  2. connect_to_server还是同步函数,内部用的time.sleep是阻塞调用,就算加了await也不会触发异步调度,反而会报错

正确实现代码

import asyncio

# 改造为异步函数,添加async关键字
async def connect_to_server(client_id):
    print(client_id)
    # 替换阻塞的time.sleep为异步非阻塞实现
    await asyncio.sleep(3)
    # 实际业务中所有网络IO、文件IO操作都要替换为对应的异步API

async def main():
    clients = [1, 2, 3, 4]
    # 先批量创建所有连接任务,不会阻塞等待执行
    tasks = [connect_to_server(client) for client in clients]
    # 统一等待所有任务执行完成,此处添加await
    await asyncio.gather(*tasks)

asyncio.run(main())

效果说明

改造后所有连接任务几乎同时启动,总执行耗时仅约3秒,远低于串行执行的12秒,符合你不需要等待上一个连接完成就启动下一个的需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 16:39:02