Google+ Seguidores

lunes, 24 de septiembre de 2018

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.

Resultado de imagen para python programming

¿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 :D

3 comentarios :
Write comentarios
  1. 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.

    ResponderEliminar
  2. 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?

    ResponderEliminar

Tu comentario es importante y nos motiva a seguir escribiendo...

Powered by Blogger .