buffersize Executor.map v Pythonu 3.14 za velike pakete proxyjev
Uporabite buffersize Executor.map v Pythonu 3.14, da ustavite porabo vhoda, medtem ko rezultati čakajo, neodvisno od max_workers.
max_workers=8 omejuje izvajalne niti. Ne prepreči pa ločeni zanki pošiljanja, da za vsako končno točko v ogromnem vhodu ustvari Future.
Python 3.14 doda omejeno možnost predhodnega branja:
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 obstoječe sinhrono preverjanje z omrežnimi roki in čiščenjem; record_result obdela vrnjeno opazovanje. Vrednosti 8 in 24 sta zgledna proračuna. brezplačen seznam proxyjev ponuja javne kandidate za končne točke; ohranite njihov protokol pri vsakem naslovu, da lahko check_proxy uporabi pravi prenos.
Ko se medpomnilnik pošiljanja napolni, map ustavi porabo ponovljivega predmeta, dokler rezultati niso izdani. To velja tudi za generatorje.
map še vedno izda v vrstnem redu vhoda: počasno zgodnje preverjanje lahko zadrži že dokončane poznejše rezultate in odloži nadaljnji vhod. Za obdelavo v vrstnem redu dokončanja uporabite izrecno omejen nabor futures, ki se dopolnjuje, ko se končujejo.
Pričakovane omrežne napake obravnavajte znotraj preverjanja, če mora paket še naprej izdajati rezultate. Neobravnavana izjema se sproži, ko se ta element pridobi. chunksize v ThreadPoolExecutor ne ponuja tega proračuna pošiljanja, starejše različice Pythona pa nimajo buffersize.