Python. Asyncio - порядок завершения работы корутин

Такой код

import asyncio
import time

async def nested():
    print(f'   start nested {int(time.time()-t0)}')
    await asyncio.sleep(2)
    print(f'   finsih nested {int(time.time()-t0)}')


async def main():
    print(f'start main {int(time.time()-t0)}')
    task = asyncio.create_task(nested())
    await asyncio.sleep(1)
    await task
    print(f'finish main {int(time.time()-t0)}')

t0=time.time()
asyncio.run(main())

Ожидаю, что корутина main завершится раньше, чем nested. На деле результат такой

start main 0
   start nested 0
   finsih nested 2
finish main 2

Можно ли написать код, чтобы main завершилась раньше, чем nested ?


Ответы (1 шт):

Автор решения: CrazyElf

Вы же явным образом ждёте завершения nested при помощи await task. Если убрать эту строку, то всё работает как вы хотите, я пробовал в Google Colab (хотя там нужно кое-что подкручивать в asyncio, так просто код не работает):

start main 0
   start nested 0
finish main 1
   finsih nested 2
→ Ссылка