CodeGym /Cursos /Python SELF PT /Iteradores e geradores assíncronos

Iteradores e geradores assíncronos

Python SELF PT
Nível 26 , Lição 3
Disponível

10.1 AsyncIterator

Iteradores assíncronos (AsyncIterator) permitem trabalhar com sequências de dados que produzem elementos de forma assíncrona. Eles são usados em funções assíncronas e corrotinas para iterar sobre dados que podem ser obtidos com atraso, como por exemplo, de requisições de rede, operações assíncronas de I/O ou outras fontes assíncronas.

Iterador assíncrono

Um iterador assíncrono deve implementar dois métodos:

Método __aiter__():

Este método deve retornar o próprio iterador assíncrono. Ele é análogo ao método __iter__() para iteradores síncronos.

Método __anext__():

Este método deve retornar o próximo valor de forma assíncrona ou lançar uma exceção StopAsyncIteration se os elementos acabarem. Ele é análogo ao método __next__() para iteradores síncronos.

Exemplo:


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)  # Imitação de atraso assíncrono
        self.current += 1
        return self.current
        
async def main():
    async for number in AsyncIterator(1, 5):
        print(number)
        
asyncio.run(main())

Iteradores assíncronos permitem processar dados conforme eles chegam, sem bloquear a execução de outras tarefas. Isso é especialmente útil para trabalhar com requisições de rede e outras operações assíncronas.

O uso de iteradores assíncronos permite escrever um código mais legível e fácil de manter para processar sequências de dados de forma assíncrona.

10.2 AsyncGenerator

Geradores assíncronos permitem produzir valores de forma assíncrona, usando as palavras-chave async e await. Eles funcionam de forma semelhante aos geradores comuns, mas podem pausar a execução para realizar operações assíncronas.

Criando um gerador assíncrono

Um gerador assíncrono é definido utilizando async def e yield. Geradores assíncronos podem usar await dentro deles para realizar operações assíncronas.

Exemplo:


async def async_generator():
    for i in range(3):
        await asyncio.sleep(1)  # Atraso assíncrono
        yield i  # Geração de valor

Usando um gerador assíncrono

Geradores assíncronos são utilizados dentro de funções assíncronas com o operador async for.


import asyncio

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

Geradores assíncronos melhoram a legibilidade e a manutenibilidade do código, permitindo usar uma construção sintática simples async for para trabalhar com sequências assíncronas.

Comentários
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION