max_workers=8 begrenzt die ausführenden Threads. Es verhindert jedoch nicht, dass eine separate Übergabeschleife für jeden Endpunkt in einer riesigen Eingabe ein Future anlegt.

Python 3.14 fügt eine begrenzte Vorausleseoption hinzu:

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 ist die vorhandene synchrone Prüfung mit Netzwerkfristen und Aufräumen; record_result verarbeitet die zurückgegebene Beobachtung. Die Werte 8 und 24 sind Beispielbudgets. Die kostenlose Proxy-Liste liefert öffentliche Kandidaten für Endpunkte; behalten Sie deren Protokoll bei jeder Adresse, damit check_proxy den richtigen Transport verwenden kann.

Wenn der Übergabepuffer voll ist, pausiert map die Aufnahme des Iterierbaren, bis Ergebnisse geliefert werden. Das gilt auch für Generatoren.

map liefert weiterhin in Eingabereihenfolge: Eine langsame frühe Prüfung kann fertige spätere Ergebnisse zurückhalten und weitere Eingaben verzögern. Für die Verarbeitung in Abschlussreihenfolge nutzen Sie eine ausdrücklich begrenzte Menge von Futures, die beim Abschluss nachgefüllt wird.

Behandeln Sie erwartete Netzwerkfehler innerhalb der Prüfung, wenn der Stapel weiterhin Ergebnisse liefern soll. Eine unbehandelte Ausnahme wird ausgelöst, wenn dieses Element abgerufen wird. chunksize von ThreadPoolExecutor bietet dieses Übergabebudget nicht, und ältere Python-Versionen haben kein buffersize.

Ähnliche Artikel