max_workers=8 limita os fíos de execución. Non impide que un bucle de envío separado cree un Future para cada extremo nunha entrada enorme.

Python 3.14 engade unha opción de lectura anticipada 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 comprobación síncrona existente, con prazos de rede e limpeza; record_result xestiona a observación que devolve. Os valores 8 e 24 son orzamentos de exemplo. A lista de proxies gratuítos ofrece candidatos públicos para os extremos; conserve o seu protocolo xunto a cada enderezo para que check_proxy use o transporte correcto.

Cando se enche o búfer de envío, map pausa o consumo do iterable ata que se entregan resultados. Isto tamén se aplica aos xeradores.

map segue entregando en orde de entrada: unha comprobación temperá lenta pode reter resultados posteriores xa completados e atrasar máis entrada. Para procesar en orde de finalización, use un conxunto de futures explicitamente limitado que se repón a medida que rematan.

Xestione os fallos de rede esperados dentro da comprobación se o lote debe seguir entregando resultados. Lánzase unha excepción non xestionada cando se recupera ese elemento. O chunksize de ThreadPoolExecutor non achega este orzamento de envío, e as versións anteriores de Python carecen de buffersize.

Artigos relacionados