Python Asyncio reúne

Python Asyncio reúne

La entrada/salida asíncrona o Asyncio es una metodología de programación que utiliza un bucle de evento o un solo hilo para lograr una alta concurrencia. Python no es el único idioma o marco que utiliza el enfoque; NodeJS de JavaScript es quizás el más conocido. Utilizamos Asyncio en Python en lugar de Múltiple lectura porque escribir una programación segura de hilo es bastante desafiante. Es significativamente más difícil encontrar problemas de carrera cuando se usa programación asíncrona, ya que puede identificar específicamente dónde el código cambiará de una tarea a la siguiente.Debido al requisito de que cada hilo tiene su pila, los hilos usan una gran cantidad de datos. La programación de Async mantiene la pila pequeña al relajarse continuamente entre operaciones, lo que permite que todos los programas compartan la misma pila. La plataforma necesita más memoria para admitir los subprocesos porque son construcciones del sistema operativo. Las tareas asincrónicas no tienen este problema.

Aquí, discutiremos la función Asyncio - Reunir. Dos funciones cruciales deben entenderse al aprender el módulo Python Asyncio. La primera opción es la ejecución, que es un método directo para ejecutar una coroutina, y la segunda opción es reunirse. El contexto actual se reinicia una vez que se completan todas las corutinas, lo que le permite lanzar varios de ellas simultáneamente utilizando Reatch.

Las respuestas de cada coroutine se enumeran en el valor de retorno. Como su nombre lo indica, Asyncio.reunir () principalmente se concentra en reunir los resultados. Espera en numerosos futuros y luego devuelve los resultados en una secuencia específica. El asyncio.recolect () cancela todos los trabajos incompletos que reúne si se cancela por sí mismo.

Sintaxis de Asyncio.reunirse en Python

Asincio.reunir () acepta un solo o múltiple esperanza como *args, los encapsula en las tareas si corresponde, entonces espera a que cada uno de ellos complete. Los resultados de cada espera se devuelven en el orden en que los pasó:

# f_output, g_output = espera asyncio.reunir (f (), g ())

También puede proporcionar las excepciones de devolución = verdadero, en la que las excepciones del caso se entregan junto con los resultados regulares, y debe determinar por sí mismo si tuvieron éxito.

Ejemplo 1:
El asyncio.La función recaudar () se puede usar para ejecutar numerosas coroutinas simultáneamente. Las corutinas se ejecutan simultáneamente por esta función como parámetros.

importar asyncio
tiempo de importación
Async Def Wishes ()::
Imprimir ("Hola")
awitasyncio.dormir (1)
Imprimir ("Que tengas un buen día")
async def main ()::
BEGIN = TIEMPO.tiempo()
awitasyncio.reunir (deseos (), deseos ())
transcurrido = tiempo.Time () - Comienza
imprime (f "__name__ ejecutado en elapsed: 0.2f segundos.")
asincio.ejecutar (main ())

Aquí importamos dos módulos: Asyncio y el tiempo de Python. Luego, definimos una función con el nombre "Deseos". Establecimos la definición de la función async. La definición de Async solo contiene código asíncrono; Todo el otro código es sincrónico. Dentro de la función Async Def Deseos, imprimimos los valores de cadena. El asyncio.Se llamó a la función de sueño y se estableció el valor para la suspensión del hilo seleccionado utilizando la palabra clave de espera. A espera devuelve el control al bucle de eventos durante una llamada de función.

Después de eso, construimos otra función ASYNC DEF como Main (). Dentro de esa función, establecemos la variable donde se llama la función de tiempo del módulo de tiempo de Python. Con la palabra clave de espera, definimos el asyncio.Recopilar función para recopilar el resultado de los deseos de la función. También registramos el tiempo de transmisión para la ejecución del código principal.

En la salida, tenemos las corutinas generadas dos veces simultáneamente a partir de la función de Wishes (). La salida del código mencionado anteriormente se muestra correctamente en la siguiente imagen:

Ejemplo 2:
La ejecución de varias rutinas co-rutinas se puede programar dinámicamente utilizando el método de recopilación de Asyncio como se demuestra en este ejemplo. Después de la recopilación exitosa de todos los resultados de co-rutina, la llamada de espera proporciona los valores como resultados e imprime los imprime.

importar asyncio
Async Def add (a: int, b: int):
Devolver A + B
Async def get_result ()::
entradas = [(4, 5), (6, 6), (7, 8), (9, 4)]
Tareas = [Asyncio.create_task (add (a, b)) para a, b en entradas]
resultado = asyncio.reunir (*tareas)
Imprimir ("Resultado:")
Imprimir (esperar el resultado)
asincio.ejecutar (get_result ())

En este ejemplo en particular, incluimos el módulo Asyncio para utilizar el Asyncio.reunir la función. Luego, definimos una función asíncrata para su adición. Generamos la función Agregar async y establecimos las dos variables A y B con el tipo de datos int en la función Agregar. Con el comando de retorno, agregamos estas variables con el operador más.

Después de configurar la coroutina, creamos otra función para programar el bucle de eventos en la coroutine. La función se llama "get_result" donde inicializamos la lista con las entradas variables. Después de eso, creamos la lista de tareas en la variable de tarea. Con el asyncio.Reunir la función, hemos reunido el resultado de la lista de tareas pasando la tarea del puntero a esa función. Finalmente imprimimos el resultado. La siguiente lista de tareas se obtiene del programa anterior:

Ejemplo 3:
Recopilamos el resultado de la tarea futura al pasar la tarea futura en el Asyncio.reunir la función. El futuro designa un cálculo que se está ejecutando actualmente o que se planificará en el futuro. Un resultado eventual de un procedimiento asincrónico está representado por un objeto único en espera de bajo nivel.

importar asyncio
de Asyncio Import Future
ASYNC DEF FUNTION1 (FUTURO):
imprimir ("la función1 duerme durante 3 segundos")
espera asyncio.dormir (3)
Imprimir ("Función1 resolviendo el futuro")
futuro.hecho()
futuro.set_result ("Se resuelve el futuro")
ASYNC DEF FUNTA2 (FUTURO):
imprimir ("la función2 espera el futuro")
espera el futuro
imprimir ("La función2 encuentra el futuro resuelto")
async def main ()::
futuro = futuro ()
Resultados = awaTasyncio.Recopilar (function2 (futuro), function1 (futuro))
Si __name __ == "__ Main___":
asincio.ejecutar (main ())
imprimir ("principal terminado")

Aquí, primero incluimos el módulo Asyncio y el módulo futuro del Asyncio. Luego, definimos la coroutina como "función1" y pasamos el futuro. Luego, dentro de esa coroutina, llamamos a la función de sueño para la suspensión de la coroutina. Llamamos a la llamada del sistema de hecho y las llamadas del sistema set_result en el futuro. Allí, tenemos otra coroutina que se llama "function2" y también toma el futuro como argumento. Llamamos al comando de espera en el futuro para resolver.

Después de eso, tenemos la definición principal de Async que llamamos la función futura, y obtenemos el resultado del futuro por el Asyncio.Método de recopilación. Al final, imprimimos la declaración cuando se terminó la función principal. La salida del código mencionado anteriormente se muestra correctamente en la siguiente imagen:

Conclusión

Reunir es fuerte, como puedes ver. Podemos solicitar sucintamente varios recursos a la vez, lo cual es una ocurrencia típica en los programas web. Con la ayuda del Python Asyncio.Recopilar módulo incorporado, la programación asíncrona se presentó en este tutorial. Recopilamos los resultados de las coroutinas, tareas y futuros. Un código concurrente puede ser su mejor opción cuando necesita optimizar el rendimiento para actividades particulares, ya que discutimos anteriormente cómo ejecutar las numerosas corutinas utilizando simultáneamente el Asyncio.reunir métodos.