pandas 在python中可以异步运行嵌套循环吗?

qxsslcnc  于 2023-02-28  发布在  Python
关注(0)|答案(1)|浏览(221)

我试着运行一个余弦相似性代码来检查我的字符串列表中的两个字符串是否相似,以使列表只包含唯一的字符串来删除相似的句子。我取了一个字符串,并将它与列表中的其他字符串进行比较。我实现的方法是O(n^2),并且最少需要一个月的时间来完成我所有的字符串。我在想,如果我可以并行运行嵌套循环任务,以减少使用asyncio的时间。
所以我尝试了一些类似的东西,但是它不能异步工作,请给我一些指导,谢谢。

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():
    for i in range(0,2):
        for j in range(0,2):
            await dumb_add(i,j)
    print('main done')

asyncio.create_task(main())

结果:

adding 0 + 0
0 + 0 = 0
adding 0 + 1
0 + 1 = 1
adding 1 + 0
1 + 0 = 1
adding 1 + 1
1 + 1 = 2
main done
mznpcxlj

mznpcxlj1#

它不是并行运行的,因为“await”关键字会导致协同例程等待每个“dumb_add”调用完成,然后再继续下一个调用。因此,这些调用是按顺序运行的,而不是并发运行的。
如果您希望并行运行“dumb_add”函数,则应该使用asyncio.gather()。
这样,您就可以创建一个可以并行执行的例程列表。
大概是这样的

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(dumb_add(i,j))
    await asyncio.gather(*tasks)
    print('main done')

asyncio.run(main())

相关问题