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

如何实现Python嵌套循环异步执行?优化余弦相似度去重效率

用asyncio实现嵌套循环任务并行执行的正确方式

你的代码之所以没有异步效果,是因为每次循环都用await直接调用异步函数,这会阻塞当前流程,必须等当前任务执行完才会启动下一个,本质还是串行执行。要实现并行,得先把所有异步任务创建好,再统一调度并发执行。

修正后的代码

import asyncio
import random

async def dumb_add(i,j):
    print("adding",i,"+",j)
    await asyncio.sleep(random.randint(0,3))
    print(i,"+",j,"=",(i+j))

async def main():
    # 先把所有要执行的异步任务收集到列表中
    tasks = []
    for i in range(0,2):
        for j in range(0,2):
            # 创建任务但不立即等待执行
            tasks.append(asyncio.create_task(dumb_add(i,j)))
    
    # 并发运行所有收集到的任务,等待全部完成
    await asyncio.gather(*tasks)
    print('main done')

# 启动事件循环执行main任务
asyncio.run(main())

执行效果说明

修改后,所有dumb_add任务会几乎同时启动,输出顺序会因为sleep的随机时长变得无序,比如可能先打印所有adding的日志,再陆续输出计算结果,真正实现异步并行。

针对你的实际场景补充

你是用余弦相似度做两两比对(CPU密集型任务),这里要注意:asyncio更适合处理IO密集型任务(比如网络请求、文件读写),对于CPU密集型任务,Python的GIL会限制单线程的并行效率,用asyncio提升的效果有限。这种情况下更推荐用多进程(比如multiprocessing模块或concurrent.futures.ProcessPoolExecutor)来利用多核CPU,才能真正缩短O(n²)复杂度任务的耗时。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.31 10:02:02