Pitón

Tutorial de Python Asyncio

Tutorial de Python Asyncio
La biblioteca Asyncio se introduce en python 3.4 para ejecutar programas concurrentes de un solo subproceso. Esta biblioteca es popular que otras bibliotecas y marcos por su impresionante velocidad y varios usos. Esta biblioteca se usa en Python para crear, ejecutar y estructurar corrutinas y manejar múltiples tareas al mismo tiempo sin hacer las tareas en paralelo. Las partes principales de esta biblioteca se definen a continuación:

Corutina: La parte del código que se puede pausar y reanudar en un script de subprocesos múltiples se llama corrutina. Las corrutinas funcionan cooperativamente en un programa de varios subprocesos. Cuando una corrutina se detiene, se puede ejecutar otra corrutina.

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

Tarea: La ejecución y el resultado de las corrutinas están definidos por las tareas. Puede asignar varias tareas utilizando la biblioteca asincio y ejecutar las tareas de forma asincrónica.

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

En este tutorial se muestra cómo puede implementar los conceptos anteriores de la biblioteca asyncio utilizando algunos ejemplos simples.

Ejemplo 1: crear una sola corrutina 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 La función se declara para calcular la suma de un rango particular de números. La tarea asigna el rango de números de 1 a 101 con un segundo de retraso. El bucle de eventos se declara que se ejecutará hasta que se completen todas las tareas del método principal. Después de calcular el valor, la función esperará un segundo e imprimirá el resultado.

importar asyncio
async def add (inicio, finalización, espera):
#Inicializar suma variable
suma = 0
#Calcular la suma de todos los números
para n en el rango (inicio, fin):
suma + = n
#Espere los segundos asignados
espera asyncio.dormir (esperar)
#Imprima el resultado
print (f'Sum from start to end is sum ')
async def main ():
#Asignar una sola tarea
tarea = bucle.create_task (agregar (1,101,1))
#Ejecutar la tarea de forma asincrónica
espera asyncio.esperar ([tarea])
if __name__ == '__main__':
#Declare bucle de eventos
loop = asyncio.get_event_loop ()
# Ejecute el código hasta completar todas las tareas
círculo.run_until_complete (main ())
#Cerrar el bucle
círculo.cerca()

Producción:

$ python3 async1.py

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

Ejemplo 2: crear varias corrutinas

El uso de la biblioteca asyncio se borrará cuando ejecute varias corrutinas al mismo tiempo. 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 segundo. La tarea con valores de espera bajos se completará al principio y la tarea con valores de espera altos se completará por fin.

importar asyncio
async def add (inicio, finalización, espera):
#Inicializar suma variable
suma = 0
#Calcular la suma de todos los números
para n en el rango (inicio, fin):
suma + = n
#Espere los segundos asignados
espera asyncio.dormir (esperar)
#Imprima el resultado
print (f'Sum from start to end is sum ')
async def main ():
#Asignar la primera tarea
task1 = bucle.create_task (agregar (5,500000,3))
# Asignar segunda tarea
task2 = bucle.create_task (agregar (2,300000,2))
# Asignar tercera tarea
task3 = bucle.create_task (agregar (10,1000,1))
#Ejecutar las tareas de forma asincrónica
espera asyncio.esperar ([tarea1, tarea2, tarea3])
if __name__ == '__main__':
#Declarar bucle de eventos
loop = asyncio.get_event_loop ()
# Ejecute el código hasta completar todas las tareas
círculo.run_until_complete (main ())
#Cerrar el bucle
círculo.cerca()

Producción:

$ python3 async1.py

El resultado muestra que la tarea3 se completa primero porque el tiempo de espera de esta tarea fue de solo 1 segundo y la tarea1 se completa en último lugar porque el tiempo de espera de esta tarea fue de 3 segundos.

Ejemplo-3: corrutinas 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. En este ejemplo se asignan dos tareas para el futuro. Mostrar mensaje La función se declara aquí para imprimir el mensaje antes de ejecutar la corrutina y después de completar la ejecución. La primera tarea esperará 2 segundos y se completará la última. La segunda tarea esperará 1 segundo y se completará primero.

importar asyncio
async def show_message (número, espera):
#Imprima el mensaje
print (f'Task number se está ejecutando ')
#Espere los segundos asignados
espera asyncio.dormir (esperar)
print (f'Task number is complete ')
async def stop_after (cuando):
espera asyncio.dormir (cuando)
círculo.detener()
async def main ():
#Asignar la primera tarea
tarea1 = asyncio.asegurar_futuro (mostrar_mensaje (1,2))
imprimir ('Programa 1')
# Asignar segunda tarea
task2 = asyncio.asegurar_futuro (mostrar_mensaje (2,1))
imprimir ('Programa 2')
#Ejecutar las tareas de forma asincrónica
espera asyncio.esperar ([tarea1, tarea2])
if __name__ == '__main__':
#Declare bucle de eventos
loop = asyncio.get_event_loop ()
# Ejecute el código del método principal hasta completar todas las tareas
círculo.run_until_complete (main ())

Producción:

$ python3 async3.py

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

Conclusión

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

Herramientas útiles para jugadores de Linux
Si le gusta jugar juegos en Linux, es probable que haya utilizado aplicaciones y utilidades como Wine, Lutris y OBS Studio para mejorar la experiencia...
Juegos HD remasterizados para Linux que nunca tuvieron un lanzamiento de Linux antes
Muchos desarrolladores y editores de juegos están creando una remasterización HD de juegos antiguos para extender la vida útil de la franquicia, por f...
Cómo usar AutoKey para automatizar juegos de Linux
AutoKey es una utilidad de automatización de escritorio para Linux y X11, programada en Python 3, GTK y Qt. Usando su funcionalidad de scripting y MAC...