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.

Relaterede artikler