首页 > 解决方案 > asyncio - 代码同步执行

问题描述

我是 python 初学者,从https://www.youtube.com/watch?v=iG6fr81xHKA&t=269s了解 asyncio 的强大功能,我尝试使用显示的这个示例并将其重新用于执行 10 次。这是一个代码片段

def main(x):
    print("Hello")
    time.sleep(3)
    print("World!")

因此,我尝试以异步方式执行此操作,但它不会异步执行。到目前为止,这是我尝试过的。我究竟做错了什么?

import time
import asyncio


async def main(x):
    print(f"Starting Task {x}")
    await asyncio.sleep(3)
    print(f"Finished Task {x}")


async def async_io():
    for i in range(10):
        await main(i)

if __name__ == "__main__":
    start_time = time.perf_counter()
    asyncio.run(async_io())
    print(f"Took {time.perf_counter() - start_time} secs")

我也尝试在 asyncio 中使用 queue_task。

标签: pythonpython-asyncio

解决方案


根据await定义,使用 等待任务main完成。因此,您的代码原样与您在上面发布的同步代码没有什么不同。如果您想同时(异步)运行它们,在等待结果的同时,您应该使用asyncio.gatherorasyncio.wait代替。

async def async_io():
    tasks = []
    for i in range(10):
        tasks += [main(i)]
    await asyncio.gather(*tasks)

如果您不想等待所有main()调用完成,您也可以只使用asyncio.create_task(main(i)),它会创建一个Task对象并安排其在后台执行。在这种情况下,def async_io()不再需要异步。


推荐阅读