Soy nuevo en Python asyncio y estoy haciendo algunos experimentos. Tengo el siguiente código:
async def say_after(n, s): await asyncio.sleep(n) print(s) async def main(): task1 = asyncio.create_task(say_after(2, 'a')) task2 = asyncio.create_task(say_after(1, 'b')) await task1 print('x', flush=True) await task2 print('y', flush=True) asyncio.run(main())Y la salida:
b a x yNo entiendo el orden aquí. ¿Alguien puede ayudar a explicar? ¿Especialmente por qué x viene después de b y a?
¿Especialmente por qué x viene después de b y a?
b se imprime en task2 aproximadamente 1 segundo después del inicio de main , y a se imprime en task1 aproximadamente 2 segundos después del inicio de main . El await task1 espera a task1 , por lo que espera unos 2 segundos. Entonces, para cuando await task1 de la tarea 1, tanto b como a se habrán impreso.
(Los "acerca de" en lo anterior son deliberados... habría variaciones, pero en la mayoría de las situaciones, serían pequeñas)