max_workers=8 nililimitahan ang mga thread na tumatakbo. Gayunpaman, hindi nito pinipigilan ang hiwalay na loop ng pagsusumite na gumawa ng Future para sa bawat endpoint sa napakalaking input.

Nagdaragdag ang Python 3.14 ng limitadong opsyon sa pagbasa nang maaga:

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 ang kasalukuyang synchronous na pagsusuri, may mga deadline ng network at paglilinis; pinangangasiwaan ng record_result ang ibinalik nitong obserbasyon. Ang mga halagang 8 at 24 ay halimbawang badyet. Ang listahan ng libreng proxy ay nagbibigay ng pampublikong kandidato para sa mga endpoint; panatilihin ang kanilang protocol kasama ng bawat address upang magamit ng check_proxy ang tamang transport.

Kapag napuno ang buffer ng pagsusumite, itinitigil ng map ang pagkonsumo ng iterable hanggang sa maibigay ang mga resulta. Nalalapat din ito sa mga generator.

Nagbibigay pa rin ang map sa pagkakasunod-sunod ng input: ang mabagal na maagang pagsusuri ay maaaring maghawak ng mga natapos nang kasunod na resulta at maantala ang karagdagang input. Para sa pagproseso sa pagkakasunod-sunod ng pagtatapos, gumamit ng tahasang limitadong set ng futures na muling pinupuno habang natatapos.

Pangasiwaan ang inaasahang pagkabigo ng network sa loob ng pagsusuri kung dapat ipagpatuloy ng batch ang pagbibigay ng mga resulta. Ang hindi pinangasiwaang exception ay itinatapon kapag kinuha ang item na iyon. Ang chunksize sa ThreadPoolExecutor ay hindi nagbibigay ng badyet na ito sa pagsusumite, at ang mga naunang bersyon ng Python ay walang buffersize.

Kaugnay na mga artikulo