Primeros pasos con asyncio - Programación en Python
Introducción:
Hola amigos de Internet, les doy la bienvenida a Mi Diario Python, el mejor blog para Aprender Python.
En el articulo de hoy veremos "¿Qué es asyncio?" y veremos como y para que utilizarlo.
Así que prepárate, sírvete una taza de café, y comencemos.
¿Qué es asyncio?
Asyncio, es una iblioteca para escribir código concurrente. Se utiliza como base ara múltiples frameworks asincrónicos de Python que proporcionan servidores web, bibliotecas de conexiones a ases de datos, colas de tareas distribuidas, entre otras.
asyncio proporciona un conjunto de API de alto nivel para:
- ejecutar coroutines Python al mismo tiempo y tener control total sobre su ejecución.
- realizar la red IO e IPC
- control de subprocesos
- distribuir tareas a través de colas
- sincronizar el código concurrente
Además, hay API de bajo nivel para desarrolladores de bibliotecas y frameworks para:
- crear y administrar bucles de eventos, que proporcionan API asíncronas para networking, ejecutar subprocesos, entre otros
- implementar protocolos eficientes
- puente de bibliotecas y código de retorno
Un ejemplo sencillo:
Para ver y comprender mejor como funciona asyncio, veamos un ejemplo muy sencillo:
import asyncio async def main(): await asyncio.sleep(1) print("Hola Mundo") loop = asyncio.get_event_loop() loop.run_until_complete(main()) loop.close()
Hola Mundo
Este es un ejemplo en el cual usamos el método run_until_complete() para que la función espere un segundo para luego imprimir "Hola Mundo". Como pueden observar, utilizamos await con el cual, utilizando asyncio.sleep definiremos el tiempo de espera de la función.
Creación de tareas
Muy bien, perfecto. Como mencionamos anteriormente, asyncio nos permite distribuir tareas.
Para ello utilizaremos nuevamente el método get_event_loop, del cual utilizaremos la función create_task para crear nuestras tareas. Veamos un ejemplo:
import asyncio """ mensaje: Función que esperara un tiempo determinado, para luego mostrar el texto. """ async def mensaje(texto, s): await asyncio.sleep(s) print(texto) loop = asyncio.get_event_loop() # Primera tarea loop.create_task(mensaje("Mensaje #1", 2)) # Segunda tarea loop.create_task(mensaje("Mensaje #2", 1)) loop.run_forever() loop.close()
Mensaje #2 Mensaje #1
Un reloj muy sencillo:
A continuación, te mostrare un ejemplo para programar dos co-rrutinas para que se ejecuten simultáneamente. Corren durante diez minutos, durante los cuales la primera co-rrutina está programada para ejecutarse cada segundo, mientras que la segunda está programada para ejecutarse cada minuto.
# Importamos asyncio import asyncio # definimos la función async def show_seconds(): "Segundos" while True: for i in range(60): print(i, 's') await asyncio.sleep(1) async def show_minute(): for i in range(1, 10): await asyncio.sleep(60) print(i, 'minuto') loop = asyncio.get_event_loop() loop.run_until_complete( # Con gather, podemos ejecutar las dos rutinas # simultaneamente asyncio.gather(show_seconds(), show_minute()) ) loop.close()
0 s 1 s 2 s 3 s 4 s 5 s
...
58 s 59 s 1 minuto 0 s 1 s 2 s 3 s
...
Muy bien, perfecto.
¿Que opinas? ¿Quieres más artículos referente a este tema? Déjanos tu comentario.
¿Alguna duda? No dudes en preguntar.
Mi nombre es Luis, y fue un placer compartir mis conocimientos con todos ustedes 😀
-
Muy buen articulo, gracias!
-
Hola Luis buenas noches, tengo una pregunta, no creo que sea referente a este tema, pero siempre me he preguntado como se maneja la información, bueno aquí va mi pregunta:
Yo tengo una aplicación sencilla en flask y la trabajo en modo de desarrollo si deseará ponerla en producción que necesitaría y como sería paso a paso ya sea en Windows server 2008 r2 o en linux y otra duda si en algún proceso de guardado de datos en mysql deseo ponerle una barra de progreso como podría calcular el tiempo en base a velocidad de internet, transmisión de datos y/o como se hace eso? -
Mi duda es cómo y para qué utilizar asyncio.
-
Sigo sin entender que ventaja tiene usar "Asyncio".
Deja una respuesta
Esto vale también para, creo que sé llaman hilos. En una página web multiples usuarios ejecutan lo mismo, para controlar la saturacion de un servidor?
Igual estoy diciendo una barvaridad, que estoy aprendiendo, yo hasta ahora sólo he programado PLCs.