max_workers=8 ogranicza wątki wykonawcze. Nie powstrzymuje jednak osobnej pętli wysyłania przed tworzeniem Future dla każdego punktu końcowego w ogromnym wejściu.

Python 3.14 dodaje ograniczoną opcję wstępnego odczytu:

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 to istniejąca kontrola synchroniczna z terminami sieciowymi i sprzątaniem; record_result obsługuje zwróconą obserwację. Wartości 8 i 24 to przykładowe budżety. darmowa lista proxy dostarcza publicznych kandydatów dla punktów końcowych; zachowaj ich protokół przy każdym adresie, aby check_proxy mógł użyć właściwego transportu.

Gdy bufor wysyłania się zapełni, map wstrzymuje zużywanie obiektu iterowalnego, dopóki wyniki nie zostaną wydane. Dotyczy to także generatorów.

map nadal wydaje wyniki w kolejności wejścia: wolna wczesna kontrola może zatrzymać gotowe późniejsze wyniki i opóźnić dalsze wejście. Aby przetwarzać w kolejności ukończenia, użyj jawnie ograniczonego zbioru futures uzupełnianego w miarę kończenia.

Obsługuj oczekiwane awarie sieci wewnątrz kontroli, jeśli partia ma dalej wydawać wyniki. Nieobsłużony wyjątek jest zgłaszany przy pobieraniu tego elementu. chunksize w ThreadPoolExecutor nie zapewnia tego budżetu wysyłania, a starsze wersje Pythona nie mają buffersize.

Powiązane artykuły