Tutorial de Python Asyncio

Tutorial de Python Asyncio
La Biblioteca Asyncio se introduce en Python 3.4 para ejecutar programas concurrentes de un solo hilo. Esta biblioteca es popular que otras bibliotecas y marcos por su impresionante velocidad y varios uso. Esta biblioteca se usa en Python para crear, ejecutar y estructurar coroutinas y manejar múltiples tareas simultáneamente sin hacer las tareas en paralelo. Las partes principales de esta biblioteca se definen a continuación:

Coroutine: La parte del código que se puede pausar y reanudar en script múltiples se llama Coroutine. Las corutinas trabajan cooperativamente en un programa multiproceso. Cuando un Coroutine se detiene, entonces otra coroutina puede ejecutar.

Bucle de eventos: Se utiliza para iniciar la ejecución de las coroutinas y manejar operaciones de entrada/salida. Se necesitan múltiples tareas y completarlas.

Tarea: La ejecución y el resultado de las coroutinas están definidos por las tareas. Puede asignar un número múltiple de tareas usando la biblioteca Asyncio y ejecutar las tareas de manera asíncrona.

Futuro: Actúa como un almacenamiento futuro donde el resultado de las corutinas se almacenará después de la finalización. Esto es útil cuando cualquier coroutina requiere esperar el resultado de otra coroutina.

La forma en que puede implementar los conceptos anteriores de la biblioteca Asyncio se muestra en este tutorial utilizando algunos ejemplos simples.

Ejemplo-1: Crear coroutina única con una sola tarea

Crea un archivo llamado async1.py y agregue el siguiente código. La biblioteca Asyncio se importa para usar las funciones de esta biblioteca. agregar se declara que la función calcula la suma de un rango particular de números. El rango de número de 1 a 101 es asignado por la tarea con un segundo retraso. El bucle de eventos se declara que se ejecutará hasta que todas las tareas del método principal completen. Después de calcular el valor, la función esperará un segundo e imprimirá el resultado.

importar asyncio
Async Def add (comienza, finaliza, espera):
#Inicializar la variable de suma
suma = 0
#Calcule la suma de todos los números
para n en rango (inicio, final):
suma += n
#Hait por segundos asignados
espera asyncio.dormir (espera)
#Imprima el resultado
print (f'Sum desde inicio a end es sum ')
async def main ()::
#Sign una sola tarea
Tarea = bucle.create_task (add (1,101,1))
#RUn la tarea de forma asincrónica
espera asyncio.esperar ([tarea])
Si __name__ == '__main__':
#Declare Event Loop
bucle = asyncio.get_event_loop ()
#RUn el código hasta completar toda la tarea
bucle.run_until_complete (main ())
#Clar el bucle
bucle.cerca()

Producción:

$ python3 async1.py

La salida muestra la suma de 1 a 101 que es 5050.

Ejemplo-2: crear múltiples coroutinas

El uso de la biblioteca Asyncio se borrará cuando ejecute múltiples corutinas simultáneamente. Crea un nuevo archivo llamado async2.py y agregue el siguiente código. Se generan tres tareas con tres rangos diferentes y valores de espera en principal() método. La primera tarea calculará la suma de 5 a 500000 esperando 3 segundos, la segunda tarea calculará la suma de 2 a 300000 esperando 2 segundos y la tercera tarea calculará la suma de 10 a 1000 esperando 1 segundos. La tarea con valores de espera bajos se completará al principio y la tarea con un alto valor de espera se completará por fin.

importar asyncio
Async Def add (comienza, finaliza, espera):
#Inicializar la variable de suma
suma = 0
#Calcule la suma de todos los números
para n en rango (inicio, final):
suma += n
#Hait por segundos asignados
espera asyncio.dormir (espera)
#Imprima el resultado
print (f'Sum desde inicio a end es sum ')
async def main ()::
#Sign Primera tarea
Tarea1 = bucle.create_task (add (5,500000,3))
#Sign Second Tarea
Tarea2 = bucle.create_task (add (2,300000,2))
#Sign tercera tarea
Tarea3 = bucle.create_task (add (10,1000,1))
#RUn las tareas de forma asincrónica
espera asyncio.Wait ([Tarea1, Tarea2, Tarea3])
Si __name__ == '__main__':
#Declare Event Loop
bucle = asyncio.get_event_loop ()
#RUn el código hasta completar toda la tarea
bucle.run_until_complete (main ())
#Clar el bucle
bucle.cerca()

Producción:

$ python3 async1.py

La salida muestra que la tarea3 se completa primero porque el tiempo de espera de esta tarea fue de solo 1 segundo y la tarea 1 se completa el último porque el tiempo de espera de esta tarea fue de 3 segundos.

Ejemplo-3: Coroutinas con futuro

Este ejemplo muestra el uso del objeto futuro de la biblioteca Asyncio. Crea un nuevo archivo llamado async3.py y agregue el siguiente código. Se asignan dos tareas para el futuro en este ejemplo. Mostrar mensaje La función se declara aquí para imprimir el mensaje antes de ejecutar la coroutina y después de completar la ejecución. La primera tarea esperará 2 segundos y completará el último. La segunda tarea esperará 1 segundos y completará primero.

importar asyncio
async def show_message (número, espera):
#Imprima el mensaje
print (f'task número se está ejecutando ')
#Hait por segundos asignados
espera asyncio.dormir (espera)
imprimir (f'task número está completado ')
Async def stop_after (cuándo):
espera asyncio.dormir (cuando)
bucle.detener()
async def main ()::
#Sign Primera tarea
Tarea1 = Asyncio.ASARCE_FUTURE (show_message (1,2))
Imprimir ('Anexo 1')
#Sign Second Tarea
Tarea2 = Asyncio.AGUESTRA_FUTURE (show_message (2,1))
Imprimir ('Anexo 2')
#RUn las tareas de forma asincrónica
espera asyncio.Wait ([Tarea1, Tarea2])
Si __name__ == '__main__':
#Declare Event Loop
bucle = asyncio.get_event_loop ()
#RUn el código del método principal hasta completar toda la tarea
bucle.run_until_complete (main ())

Producción:

$ python3 async3.py

Se muestra en la salida que la tarea1 se inicia primero y se completa el último, y la tarea2 se inicia más tarde, pero se completa primero por tiempo de espera corto.

Conclusión

El concepto básico de programación asincrónica utilizando la Biblioteca de Python de Asyncio se explica aquí. Espero que pueda escribir código multiproceso en Python después de practicar los ejemplos de este tutorial.