python中for循环中的异步作业

时间:2020-12-20 11:19:26

标签: python asynchronous python-asyncio

我有一个功能

policies.js

我想为列表中的多个元素异步调用此函数

async def hello(a):
    await asyncio.sleep(2)
    print(a)

类似这样,但下面的代码一个接一个地运行。

list =  ['words','I','need','to','print','parallely']

有没有更好的方法来做到这一点?我使用过 for word in list: await hello(word) 但不确定如何在循环中使用它们。

1 个答案:

答案 0 :(得分:1)

这是它应该如何工作的示例:

import asyncio

list_1 = 'hi i am cool'.split()

async def hello(a):
    await asyncio.sleep(2)
    print(a)
    
async def run_tasks():
   tasks = [hello(word) for word in list_1]
   await asyncio.wait(tasks)

def main():
   loop = asyncio.new_event_loop()
   asyncio.set_event_loop(loop)
   loop.run_until_complete(run_tasks())
   loop.close()

main()

示例输出:

am
i
cool
hi

以上代码主要用于演示,但新的更简单的方法是:

def main2():
    asyncio.run(run_tasks())

main2()

示例输出:

i
hi
cool
am

注意:

正如评论中所建议的,为了保持输入的顺序,将 run_tasks 定义为:

async def run_tasks():
   tasks = [hello(word) for word in list_1]
   await asyncio.gather(*tasks)