loop.create_task 的行为

Behaviour of loop.create_task

我是 asyncio 库的新手并编写了以下代码来理解它的行为

CONNECTIONS = 3
REPEAT = 5

async def test(payload):
    for i in range(REPEAT):
        print(payload)
        await asyncio.sleep(1)

async def run_test():
    loop = asyncio.get_event_loop()
    for i in range(CONNECTIONS):
        loop.create_task(test(f"Hello World {i}"))

asyncio.run(run_test())

然而,当我运行它时,我得到了以下输出

Hello World 0
Hello World 1
Hello World 2

我原以为它们每个都被打印 5 次。有人可以帮我理解吗?此外,我应该更改什么才能观察到这些语句打印了 5 次?

你已经创建了任务但还没有启动它,另外,你应该等待它们完成,否则事件循环会提前结束。要同时启动多个任务,您必须使用 asyncio.gather():

async def run_test():
    loop = asyncio.get_event_loop()
    tasks = []
    for i in range(CONNECTIONS):
        task = loop.create_task(test(f"Hello World {i}"))
        tasks.append(task)
    await asyncio.gather(*tasks)