asyncio - 代码同步执行

asyncio - Code is executing synchronously

我是 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。

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

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

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