Así son las funciones asincronas en Python

En Python, para definir una función asíncrona, se utiliza la palabra clave «async» antes de la definición de la función. Además, dentro de la función, se utilizan las palabras clave «await» y «async with» para realizar operaciones asíncronas.

instalacion:

pip install asyncio

Ejemplo de una función asíncrona que espera una tarea por un segundo y luego devuelve un mensaje:

import asyncio

async def espera():
    await asyncio.sleep(1)
    return "Hola mundo!"

asyncio.run(espera())

En este ejemplo, utilizamos la función asyncio.sleep() para esperar un segundo antes de devolver el mensaje «Hola mundo!».

Ejemplo de una función asíncrona que realiza una operación de E/S (entrada/salida):

import asyncio

async def lee_archivo(nombre_archivo):
    async with aiofiles.open(nombre_archivo, mode='r') as archivo:
        contenido = await archivo.read()
    return contenido

asyncio.run(lee_archivo('archivo.txt'))

En este ejemplo, utilizamos la biblioteca aiofiles para leer el contenido de un archivo. La función async with se utiliza para asegurarse de que el archivo és de su uso. Además, utilizamos la palabra clave «await» para esperar la finalización de la lectura del archivo antes de devolver su contenido.

Ejemplo de una función asíncrona que realiza múltiples tareas en paralelo:

import asyncio

async def tarea_1():
    await asyncio.sleep(1)
    return "Tarea 1 completada"

async def tarea_2():
    await asyncio.sleep(2)
    return "Tarea 2 completada"

async def tarea_3():
    await asyncio.sleep(3)
    return "Tarea 3 completada"

async def realiza_tareas():
    tarea1 = asyncio.create_task(tarea_1())
    tarea2 = asyncio.create_task(tarea_2())
    tarea3 = asyncio.create_task(tarea_3())

    resultados = await asyncio.gather(tarea1, tarea2, tarea3)

    return resultados

asyncio.run(realiza_tareas())

En este ejemplo, creamos tres funciones asíncronas diferentes que realizan tareas que tardan diferentes cantidades de tiempo en completarse. Luego, utilizamos la función asyncio.create_task() para crear tareas individuales para cada función asíncrona y luego utilizamos asyncio.gather() para esperar la finalización de todas las tareas y devolver sus resultados.