我有个问题。
我编写了一个模拟http请求的简单代码:
from asyncio import sleep, run
async def get():
print("Started get()")
await sleep(3)
print("Finished get()")
async def async_main():
await get()
await get()
await get()
if __name__ == "__main__":
run(async_main())我希望结果应该是:
Started get()
Started get()
Started get()
(No output, just wait 3 seconds)
Finished get()
Finished get()
Finished get()但结果是:
Started get()
(No output, just wait 3 seconds)
Finished get()
Started get()
(No output, just wait 3 seconds)
Finished get()
Started get()
(No output, just wait 3 seconds)
Finished get()为什么会发生这种事?
发布于 2022-01-08 13:27:57
您需要调度协同线,要么显式地使用asyncio.create_task(),要么隐式地使用asyncio.gather()。
from asyncio import sleep, run
async def get():
print("Started get()")
await sleep(3)
print("Finished get()")
async def async_main():
tasks = [asyncio.create_task(get()),
asyncio.create_task(get()),
asyncio.create_task(get())] # Explicit
await asyncio.gather(*tasks)
async def async_main(): # Option 2
await asyncio.gather(get(), get(), get()) # Implicit
if __name__ == "__main__":
run(async_main())发布于 2022-01-08 14:13:28
只需异步运行任务,如下所示
async def async_main():
await asyncio.gather(get(), get(), get())
if __name__ == "__main__":
# run(async_main()) or
asyncio.run(async_main())https://stackoverflow.com/questions/70629400
复制相似问题