Procesamiento asíncrono en Python

Procesamiento asíncrono en Python

Este artículo explica el procesamiento asíncrono en Python.

Puedes aprender ejemplos de código para el uso básico de async/await y el módulo asyncio de Python.

YouTube Video

Procesamiento asíncrono en Python

El procesamiento asíncrono en Python es un mecanismo para gestionar eficientemente operaciones de entrada y salida que consumen mucho tiempo, como leer y escribir archivos o la comunicación por red. En el procesamiento síncrono, la siguiente operación espera hasta que termine la actual, pero con el procesamiento asíncrono puedes continuar con otras tareas durante el tiempo de espera. En Python, se proporciona el módulo asyncio para realizar procesamiento asíncrono. Aquí explicaremos sus elementos básicos y cómo utilizarlos paso a paso.

Sintaxis Básica

En el núcleo del procesamiento asíncrono se encuentran funciones llamadas corutinas. Las funciones async definen funciones asíncronas, y await se utiliza para esperar una tarea asíncrona dentro de esas funciones.

 1import asyncio
 2
 3async def say_hello():
 4    print("Hello")
 5    await asyncio.sleep(1)
 6    print("World")
 7
 8if __name__ == "__main__":
 9    # Execute asynchronous task
10    asyncio.run(say_hello())
  • En el código anterior, la función say_hello se define como una tarea asíncrona. Mientras se espera 1 segundo con sleep(), otras tareas asíncronas pueden ejecutarse.

Ejecución de múltiples tareas

Al utilizar la función gather del módulo asyncio, puedes ejecutar varias tareas simultáneamente.

 1import asyncio
 2
 3async def task1():
 4    print("Task 1 started")
 5    await asyncio.sleep(2)
 6    print("Task 1 completed")
 7
 8async def task2():
 9    print("Task 2 started")
10    await asyncio.sleep(1)
11    print("Task 2 completed")
12
13async def main():
14    await asyncio.gather(task1(), task2())
15
16if __name__ == "__main__":
17    asyncio.run(main())
  • En este ejemplo, task1 y task2 se ejecutan concurrentemente. Como resultado, task2 se completa primero de las dos tareas, pero el tiempo total de ejecución equivale al tiempo de ejecución de la tarea más larga.

Manejo de Errores

El manejo de errores es importante incluso en el procesamiento asíncrono. Puedes capturar y manejar errores utilizando la sintaxis estándar de try-except.

 1import asyncio
 2
 3async def faulty_task():
 4    raise Exception("An error occurred")
 5
 6async def main():
 7    try:
 8        await faulty_task()
 9    except Exception as e:
10        print(f"Caught an error: {e}")
11
12if __name__ == "__main__":
13    asyncio.run(main())
  • Este código demuestra cómo las excepciones que ocurren dentro de funciones asíncronas pueden ser capturadas con try-except y cómo manejar sus mensajes de error de forma segura. La excepción de faulty_task se captura dentro de main y se muestra adecuadamente.

Resumen

El procesamiento asíncrono en Python utiliza async / await y asyncio para ejecutar otras tareas de forma concurrente mientras se espera por la entrada o salida, permitiendo un procesamiento eficiente. Al aprovechar la ejecución concurrente de múltiples tareas y la E/S asíncrona, puedes mejorar significativamente el rendimiento. Además, como puedes manejar los errores igual que con try-except común, puedes ejecutar código asíncrono de forma segura.

Puedes seguir el artículo anterior utilizando Visual Studio Code en nuestro canal de YouTube. Por favor, también revisa nuestro canal de YouTube.

YouTube Video