max_workers=8 limita i thread in esecuzione. Non impedisce però a un ciclo di invio separato di creare un Future per ogni endpoint in un input enorme.

Python 3.14 aggiunge un'opzione di lettura anticipata limitata:

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 è il controllo sincrono esistente, con scadenze di rete e pulizia; record_result gestisce l'osservazione restituita. I valori 8 e 24 sono budget di esempio. La elenco di proxy gratuiti fornisce candidati pubblici per gli endpoint; conserva il loro protocollo con ogni indirizzo così che check_proxy possa usare il trasporto corretto.

Quando il buffer di invio si riempie, map sospende il consumo dell'iterabile finché non vengono prodotti risultati. Vale anche per i generatori.

map produce ancora nell'ordine di input: un controllo iniziale lento può trattenere risultati successivi già completati e ritardare ulteriore input. Per elaborare in ordine di completamento, usa un insieme di futures esplicitamente limitato, rifornito man mano che terminano.

Gestisci i guasti di rete attesi all'interno del controllo se il lotto deve continuare a produrre risultati. Un'eccezione non gestita viene sollevata quando quell'elemento viene prelevato. chunksize di ThreadPoolExecutor non offre questo budget di invio, e le versioni precedenti di Python non hanno buffersize.

Articoli correlati