buffersize di Executor.map in Python 3.14 per grandi lotti di proxy
Usa buffersize di Executor.map in Python 3.14 per sospendere il consumo dell'input mentre i risultati attendono, indipendentemente da max_workers.
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.