Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Aprende Creación y Ejecución de Corutinas | Programación asíncrona
Programación Estructural en Python

Creación y Ejecución de Corutinas

Desliza para mostrar el menú

Para comenzar a trabajar con la programación asíncrona en Python, es necesario comprender las corutinas. Una corutina es una función especial definida con async def. Las corutinas permiten pausar y reanudar la ejecución, lo que hace posible gestionar tareas como la espera de operaciones de entrada/salida, tales como la lectura de archivos, solicitudes de red o consultas a bases de datos, sin bloquear todo el programa. Esto significa que, mientras una tarea espera datos, otras pueden seguir ejecutándose, mejorando la eficiencia y la capacidad de respuesta.

Para ejecutar una corutina, se utiliza asyncio.run, que inicia un bucle de eventos, ejecuta la corutina y cierra el bucle al finalizar. Este es el método estándar para lanzar código asíncrono en Python moderno.

Si se desea ejecutar más de una corutina al mismo tiempo, se puede usar asyncio.gather para programarlas de manera concurrente. Esto permite que el programa inicie varias tareas y espere a que todas finalicen, aprovechando mejor el tiempo, especialmente cuando se espera por operaciones lentas como las de E/S.

El siguiente código demuestra estos conceptos.

import asyncio

async def greet(name, delay):
    await asyncio.sleep(delay)
    print(f"Hello, {name}!")

async def main():
    # Schedule two coroutines to run concurrently
    await asyncio.gather(
        greet("Alice", 2),
        greet("Bob", 1)
    )

asyncio.run(main())

Resultado esperado:

Hello, Bob!
Hello, Alice!

El saludo de Bob aparece primero porque utiliza un retraso más corto (1 segundo) que el de Alice (2 segundos).

La corrutina greet se crea con async def, lo que permite pausar la ejecución con await asyncio.sleep(delay) antes de imprimir un saludo. La corrutina main programa dos instancias de greet: una para "Alice" con un retraso de 2 segundos y otra para "Bob" con un retraso de 1 segundo, utilizando asyncio.gather. Esto significa que ambos saludos se gestionan de forma concurrente, por lo que el programa no espera a que uno termine antes de iniciar el otro. Finalmente, asyncio.run(main()) inicia el bucle de eventos, ejecuta la corrutina main y asegura que todo se limpie después. Este enfoque permite manejar varias tareas que implican esperas (como solicitudes de red o retrasos de tiempo) al mismo tiempo, haciendo que el programa sea más eficiente y receptivo.

question mark

¿Qué afirmación describe mejor cómo asyncio.gather programa las corrutinas?

Selecciona la respuesta correcta

¿Todo estuvo claro?

¿Cómo podemos mejorarlo?

¡Gracias por tus comentarios!

Sección 4. Capítulo 2

Pregunte a AI

expand

Pregunte a AI

ChatGPT

Pregunte lo que quiera o pruebe una de las preguntas sugeridas para comenzar nuestra charla

Sección 4. Capítulo 2
some-alt