max_workers=8 rajoittaa suorittavia säikeitä. Se ei kuitenkaan estä erillistä lähetyssilmukkaa luomasta Futurea jokaiselle päätepisteelle valtavassa syötteessä.

Python 3.14 lisää rajatun ennakkolukuvaihtoehdon:

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 on olemassa oleva synkroninen tarkistus verkkoyhteyden määräaikoineen ja siivouksineen; record_result käsittelee sen palauttaman havainnon. Arvot 8 ja 24 ovat esimerkkibudjetteja. ilmainen proxyluettelo tarjoaa julkisia ehdokkaita päätepisteille; säilytä niiden protokolla kunkin osoitteen yhteydessä, jotta check_proxy voi käyttää oikeaa siirtotietä.

Kun lähetyspuskuri täyttyy, map keskeyttää iteroitavan kulutuksen, kunnes tuloksia luovutetaan. Tämä koskee myös generaattoreita.

map luovuttaa edelleen syötteen järjestyksessä: hidas varhainen tarkistus voi pitää valmiit myöhemmät tulokset ja viivyttää lisäsyötettä. Valmistumisjärjestyksessä käsittelyyn käytä nimenomaisesti rajattua futures-joukkoa, jota täydennetään niiden valmistuessa.

Käsittele odotetut verkkovirheet tarkistuksen sisällä, jos erän on jatkettava tulosten luovuttamista. Käsittelemätön poikkeus nostetaan, kun kyseinen kohde noudetaan. ThreadPoolExecutorin chunksize ei tarjoa tätä lähetysbudjettia, eikä vanhemmissa Python-versioissa ole buffersize.

Aiheeseen liittyvät artikkelit