buffersize Executor.map w Pythonie 3.14 dla dużych partii proxy
Użyj buffersize Executor.map w Pythonie 3.14, aby wstrzymać zużycie danych wejściowych, gdy wyniki czekają, niezależnie od max_workers.
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.