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