Python 3.14 Executor.map buffersize por grandaj proksaj aroj
Uzu Python 3.14 Executor.map buffersize por paŭzi enigon dum rezultoj atendas, sendepende de max_workers.
max_workers=8 limigas la plenumantajn fadenojn. Ĝi tamen ne malhelpas apartan enigan buklon krei Future por ĉiu finpunkto en grandega enigo.
Python 3.14 aldonas limigitan antaŭlegadan opcion:
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 estas la ekzistanta sinkrona kontrolo kun retaj limdatoj kaj purigado; record_result pritraktas la observon, kiun ĝi redonas. La valoroj 8 kaj 24 estas ekzemplaj buĝetoj. La senpaga proksa listo provizas publikajn kandidatojn por finpunktoj; konservu ilian protokolon ĉe ĉiu adreso, por ke check_proxy uzu la ĝustan transporton.
Kiam la eniga bufro pleniĝas, map paŭzigas la konsumadon de la ripeteblo ĝis rezultoj estas liveritaj. Tio ankaŭ validas por generatoroj.
map ankoraŭ liveras laŭ eniga ordo: malrapida frua kontrolo povas reteni jam finitajn postajn rezultojn kaj prokrasti pluan enigon. Por prilabori laŭ finiĝa ordo, uzu eksplicite limigitan aron da futures, replenigitan dum ili finiĝas.
Pritraktu atendatajn retajn paneojn ene de la kontrolo, se la aro devas daŭre liveri rezultojn. Ne traktita escepto leviĝas, kiam tiu ero estas prenita. chunksize de ThreadPoolExecutor ne donas ĉi tiun enigan buĝeton, kaj pli fruaj Python-versioj ne havas buffersize.