Issue
I have a question.
I wrote a simple code that mimics http request:
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())
I expected that the result should be like:
Started get()
Started get()
Started get()
(No output, just wait 3 seconds)
Finished get()
Finished get()
Finished get()
But the result was:
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()
Why this is happening?
Solution
You need to schedule the coroutines, either explicitly using asyncio.create_task()
or implicitly using 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())
Answered By - Bharel
0 comments:
Post a Comment
Note: Only a member of this blog may post a comment.