What does asyncio.create_task() do? I have looked at the docs and can't seem to understand it. A bit of code that confuses me is this:
import asyncio
async def counter_loop(x, n):
    for i in range(1, n + 1):
        print(f"Counter {x}: {i}")
        await asyncio.sleep(0.5)
    return f"Finished {x} in {n}"
async def main():
    slow_task = asyncio.create_task(counter_loop("Slow", 4))
    fast_coro = counter_loop("Fast", 2)
    print("Awaiting Fast")
    fast_val = await fast_coro
    print("Finished Fast")
    print("Awaiting Slow")
    slow_val = await slow_task
    print("Finished Slow")
    print(f"{fast_val}, {slow_val}")
asyncio.run(main())
This gives the following output:
001 | Awaiting Fast
002 | Counter Fast: 1
003 | Counter Slow: 1
004 | Counter Fast: 2
005 | Counter Slow: 2
006 | Finished Fast
007 | Awaiting Slow
008 | Counter Slow: 3
009 | Counter Slow: 4
010 | Finished Slow
011 | Finished Fast in 2, Finished Slow in 4
I don't understand quite how this is working.
- Shouldn't the slow_tasknot be able to run until the completion of thefast_corobecause it was never used in anasyncio.gathermethod?
- Why do we have to await slow_task?
- Why is Awaiting Slowprinted after the coroutine appears to have started?
- What really is a task? I know that what gatheris doing is scheduling a task. Andcreate_tasksupposedly creates a task.
An in-depth answer would be greatly appreciated. Thanks!
It also might be worth mentioning that I know very little about Futures.
 
     
    