1
resposta

[Dúvida] É possível chamar o 'client.models.generate_content()' em paralelo?

Olá!

Gostaria de saber se é possível paralelizar este laço 'for' para acelerar o processo de análise de sentimento?

Como funciona o limite de chamadas por 'key' do Gemini? Existe um número máximo de chamadas simultâneas?

for review_numero, resenha in enumerate(coluna_de_reviews):
    resposta = client.models.generate_content(
        model="gemini-2.5-flash",
        contents=f"""Você irá analisar a resenha que eu te mandarei abaixo, e retorna com uma análise de sentimento.
        Você deve responder APENAS com uma das seguintes palavras: 'Positiva', 'Negativa' ou 'Neutra',
        indicando o sentimento relativo aquela resenha específica.
        Exemplos:
        "Eu adorei esse produto" -> Positiva
        "Gostei, mas não é nada de especial" -> Neutra
        "Odiei esse produto" -> Negativa

        Segue a resenha a ser analisada: {resenha}
        """
    )

Matricule-se agora e aproveite até 50% OFF

O maior desconto do ano para você evoluir com a maior escola de tecnologia

QUERO APROVEITAR
1 resposta

Olá, Anderson! Tudo bem?

Boa! O loop for sequencial é lento pois espera cada API. Tarefas I/O podem ser aceleradas com concorrência.

Imagino que usando asyncion(Assíncrono). A própria biblioteca do Google oferece métodos assíncronos. Em vez de usar client.models.generate_content(), você usaria client.models.generate_content_async().
Você criaria uma função async que chama a API e, em vez de um for loop, usaria asyncio.gather() para disparar todas (ou um lote) de requisições de uma vez e esperar elas terminarem.

Também tem um curso ótimo na Alura sobre isso: Praticando Python: Programação Assíncrona

Ou imagino também o uso de threading (Multithreading). Aí, caso você não esteja confortável com async/await, uma alternativa mais "clássica" é usar a biblioteca concurrent.futures.ThreadPoolExecutor. Ela permite que você execute sua função de análise em várias threads. O efeito é similar: várias chamadas de API acontecem ao mesmo tempo.

Um ponto importante e crucial que você mencionou. É que não pode simplesmente disparar 10.000 chamadas de uma vez.

O Gemini (e a maioria das APIs) não limita exatamente as chamadas simultâneas, mas sim a taxa de chamadas. O limite mais comum para o tier gratuito do Gemini é de 60 Requisições por Minuto (RPM). (Ah, e um detalhe: o modelo que você usou é provavelmente o gemini-1.5-flash, o que é mais limitado.

Se você disparar, por exemplo, 100 chamadas em paralelo, as primeiras 60 (dentro daquele minuto) funcionarão, e as restantes começarão a falhar com um erro 429: Too Many Requests.

A melhor prática é implementar um mecanismo de "exponential backoff" (recuo exponencial): se você receber um erro 429, seu código deve esperar 1 segundo e tentar de novo. Se falhar de novo, espera 2s, depois 4s, e assim por diante.

Então, paralelize para acelerar, mas faça isso controlando a taxa de requisições (ex: usando um asyncio.Semaphore para limitar a ~60 por minuto) e sempre trate o erro 429 com backoff. No mais, recomendo que use versões mais robusta da IA para chegar nesses feitos.

Em resumo, para fazer seu script funcionar rápido e sem quebrar, você precisa, paralelizar,Controlar o fluxo para respeitar o limite de 60 RPM. E depois tratar os erros (especificamente o erro 429).

Bons estudos!

Sucesso

Imagem da comunidade