max_workers=8 limita as threads de execução. Não impede, porém, que um laço de submissão separado crie um Future para cada endpoint em uma entrada enorme.

O Python 3.14 acrescenta uma opção de leitura antecipada limitada:

from concurrent.futures import ThreadPoolExecutor

with ThreadPoolExecutor(max_workers=8) as executor:
    for result in executor.map(check_proxy, endpoints, buffersize=24):
        record_result(result)

check_proxy é a verificação síncrona existente, com prazos de rede e limpeza; record_result trata a observação devolvida. Os valores 8 e 24 são orçamentos de exemplo. A lista de proxies gratuitos fornece candidatos públicos para endpoints; mantenha o protocolo com cada endereço para que check_proxy use o transporte correto.

Quando o buffer de submissão enche, map pausa o consumo do iterável até que resultados sejam entregues. Isso também se aplica a geradores.

map ainda entrega na ordem de entrada: uma verificação inicial lenta pode reter resultados posteriores já concluídos e atrasar mais entrada. Para processar na ordem de conclusão, use um conjunto de futures explicitamente limitado, reabastecido conforme terminam.

Trate falhas de rede esperadas dentro da verificação se o lote deve continuar entregando resultados. Uma exceção não tratada é levantada quando esse item é obtido. O chunksize do ThreadPoolExecutor não oferece esse orçamento de submissão, e versões anteriores do Python não têm buffersize.

Artigos relacionados