max_workers=8 ograničava izvršne dretve. Ali ne sprječava zasebnu petlju za predaju da stvori Future za svaku krajnju točku u ogromnom ulazu.

Python 3.14 dodaje ograničenu opciju unaprijednog čitanja:

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 je postojeća sinkrona provjera s mrežnim rokovima i čišćenjem; record_result obrađuje njezino vraćeno opažanje. Vrijednosti 8 i 24 primjerni su proračuni. besplatna lista proxyja daje javne kandidate za krajnje točke; čuvajte njihov protokol uz svaku adresu kako bi check_proxy mogao koristiti ispravan prijenos.

Kad se međuspremnik predaje napuni, map pauzira trošenje iterabla dok se rezultati ne vrate. To vrijedi i za generatore.

map još uvijek vraća u redoslijedu ulaza: spora rana provjera može zadržati dovršene kasnije rezultate i odgoditi daljnji ulaz. Za obradu po redoslijedu dovršetka koristite izričito ograničen skup futuresa koji se dopunjuje kako završavaju.

Obrađujte očekivane mrežne kvarove unutar provjere ako serija treba nastaviti vraćati rezultate. Neobrađena iznimka podiže se kad se taj element dohvati. chunksize u ThreadPoolExecutoru ne daje taj proračun predaje, a starije verzije Pythona nemaju buffersize.

Povezani članci