Python 3.14 Executor.map buffersize lielām starpniekserveru paketēm
Izmantojiet Python 3.14 Executor.map buffersize, lai apturētu ievades patēriņu, kamēr gaida rezultātus, neatkarīgi no max_workers.
max_workers=8 ierobežo izpildes pavedienus. Taču tas neliedz atsevišķai iesniegšanas cilpai izveidot Future katram galapunktam milzīgā ievadē.
Python 3.14 pievieno ierobežotu priekšlasīšanas opciju:
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 ir esošā sinhronā pārbaude ar tīkla termiņiem un tīrīšanu; record_result apstrādā tās atgriezto novērojumu. Vērtības 8 un 24 ir piemēru budžeti. bezmaksas starpniekserveru saraksts nodrošina publiskus kandidātus galapunktiem; saglabājiet to protokolu pie katras adreses, lai check_proxy varētu izmantot pareizo transportu.
Kad iesniegšanas buferis piepildās, map pauzē atkārtojamā objekta patēriņu, līdz rezultāti tiek izsniegti. Tas attiecas arī uz ģeneratoriem.
map joprojām izsniedz ievades secībā: lēna agrīna pārbaude var aizturēt jau pabeigtus vēlākus rezultātus un aizkavēt turpmāku ievadi. Lai apstrādātu pabeigšanas secībā, izmantojiet nepārprotami ierobežotu futures kopu, kas tiek papildināta, tiem beidzoties.
Apstrādājiet gaidāmos tīkla traucējumus pārbaudes iekšienē, ja paketei jāturpina izsniegt rezultātus. Neapstrādāts izņēmums tiek izmests, kad šis elements tiek paņemts. ThreadPoolExecutor chunksize nesniedz šo iesniegšanas budžetu, un vecākām Python versijām nav buffersize.