CodeGym /Cursos /Python SELF ES /Iteradores y generadores asíncronos

Iteradores y generadores asíncronos

Python SELF ES
Nivel 26 , Lección 3
Disponible

10.1 AsyncIterator

Los iteradores asíncronos (AsyncIterator) permiten trabajar con secuencias de datos que producen elementos de forma asíncrona. Se utilizan en funciones asíncronas y corrutinas para iterar sobre datos que pueden ser obtenidos con retraso, por ejemplo, de solicitudes de red, operaciones de I/O asíncronas u otras fuentes asíncronas.

Iterador asíncrono

Un iterador asíncrono debe implementar dos métodos:

Método __aiter__():

Este método debe devolver el propio iterador asíncrono. Es similar al método __iter__() para iteradores síncronos.

Método __anext__():

Este método debe devolver el siguiente valor de forma asíncrona o lanzar una excepción StopAsyncIteration si los elementos se han agotado. Es similar al método __next__() para iteradores síncronos.

Ejemplo:


import asyncio

class AsyncIterator:
    def __init__(self, start, end):
        self.current = start
        self.end = end
        
    def __aiter__(self):
        return self
        
    async def __anext__(self)(self):
        if self.current >= self.end:
            raise StopAsyncIteration
        
        await asyncio.sleep(1)  # Simulación de retraso asíncrono
        self.current += 1
        return self.current
        
async def main():
    async for number in AsyncIterator(1, 5):
        print(number)
        
asyncio.run(main())

Los iteradores asíncronos permiten procesar datos a medida que se reciben, sin bloquear la ejecución de otras tareas. Esto es especialmente útil para trabajar con solicitudes de red y otras operaciones asíncronas.

El uso de iteradores asíncronos permite escribir código más legible y mantenible para procesar secuencias de datos de manera asíncrona.

10.2 AsyncGenerator

Los generadores asíncronos permiten producir valores de forma asíncrona, utilizando las palabras clave async y await. Funcionan de manera similar a los generadores normales, pero pueden pausar la ejecución para llevar a cabo operaciones asíncronas.

Creación de un generador asíncrono

Un generador asíncrono se define utilizando async def y yield. Los generadores asíncronos pueden usar await dentro de sí mismos para realizar operaciones asíncronas.

Ejemplo:


async def async_generator():
    for i in range(3):
        await asyncio.sleep(1)  # Retraso asíncrono
        yield i  # Generación de valor

Uso de un generador asíncrono

Los generadores asíncronos se utilizan dentro de funciones asíncronas con la instrucción async for.


import asyncio

async def main():
    async for value in async_generator():
        print(value)
            
asyncio.run(main())

Los generadores asíncronos mejoran la legibilidad y mantenibilidad del código, permitiendo usar una construcción sintáctica simple async for para trabajar con secuencias asíncronas.

Comentarios
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION