将函数 运行 两次 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
如果我 运行:
会发生什么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