将函数 运行 两次 asyncio.gather(create_task(task))

Will functions run twice with asyncio.gather(create_task(task))

如果我 运行:

会发生什么
tasks = []
for item in items:
  tasks.append(asyncio.create_task(f(item)))

res = asyncio.gather(*tasks)

函数 运行 会两次吗?在 create_task 之后和 gather

之后

首先,请注意,您必须 等待 asyncio.gather() 让他们完全 运行。

一旦修复,函数将只运行一次。 create_task() 将它们提交到事件循环。在那之后,他们将在下一个 await 期间 运行。 asyncio.gather() 只是确保调用协程等待它们完成。例如,这会将 运行 它们分成两部分:

tasks = []
for item in items:
  tasks.append(asyncio.create_task(f(item)))

await asyncio.sleep(1)   # here they start running and run for a second
res = await asyncio.gather(*tasks)  # here we wait for them to complete