max_workers=8 beperkt de uitvoerende threads. Het verhindert echter niet dat een aparte indieningslus voor elk eindpunt in een enorme invoer een Future aanmaakt.

Python 3.14 voegt een begrensde vooruitleesoptie toe:

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 is de bestaande synchrone controle met netwerktime-outs en opschoning; record_result verwerkt de teruggegeven observatie. De waarden 8 en 24 zijn voorbeeldbudgetten. De gratis proxylijst levert openbare kandidaten voor eindpunten; houd hun protocol bij elk adres zodat check_proxy het juiste transport kan gebruiken.

Wanneer de indieningsbuffer vol is, pauzeert map het verbruik van het iterable totdat resultaten worden geleverd. Dit geldt ook voor generators.

map levert nog steeds in invoervolgorde: een trage vroege controle kan voltooide latere resultaten vasthouden en verdere invoer vertragen. Voor verwerking in voltooiingsvolgorde gebruikt u een expliciet begrensde set futures die wordt aangevuld zodra ze klaar zijn.

Behandel verwachte netwerkstoringen binnen de controle als de batch resultaten moet blijven leveren. Een onafgehandelde uitzondering wordt opgeworpen wanneer dat item wordt opgehaald. chunksize van ThreadPoolExecutor biedt dit indieningsbudget niet, en eerdere Python-versies hebben geen buffersize.

Gerelateerde artikelen