Python 3.14 Executor.map buffersize til store proxy-batcher
Brug Python 3.14 Executor.map buffersize til at standse inputforbruget, mens resultater venter, uafhængigt af max_workers.
max_workers=8 begrænser de kørende tråde. Det forhindrer ikke en separat indsendelsesløkke i at oprette en Future for hver endpoint i et enormt input.
Python 3.14 tilføjer en begrænset forudlæsningsmulighed:
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 er den eksisterende synkrone kontrol med netværksfrister og oprydning; record_result håndterer den returnerede observation. Værdierne 8 og 24 er eksempelbudgetter. gratis proxyliste leverer offentlige kandidater til endpoints; behold deres protokol sammen med hver adresse, så check_proxy kan bruge den korrekte transport.
Når indsendelsesbufferen er fuld, sætter map forbruget af det itererbare på pause, indtil resultater udleveres. Det gælder også generatorer.
map udleverer stadig i inputrækkefølge: en langsom tidlig kontrol kan holde færdige senere resultater tilbage og forsinke yderligere input. Til behandling i færdiggørelsesrækkefølge skal du bruge et eksplicit begrænset sæt futures, der genopfyldes, efterhånden som de afsluttes.
Håndtér forventede netværksfejl inde i kontrollen, hvis batchen skal fortsætte med at udlevere resultater. En uhåndteret undtagelse rejses, når det element hentes. chunksize i ThreadPoolExecutor giver ikke dette indsendelsesbudget, og tidligere Python-versioner mangler buffersize.