max_workers=8 は実行スレッド数を制限します。しかし、巨大な入力で別の投入ループが各エンドポイントの Future を作ることは止められません。

Python 3.14 は上限付きの先読みオプションを追加します:

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 はネットワーク期限と後始末を備えた既存の同期チェックです。record_result はその返却された観測を処理します。値 8 と 24 は例示の予算です。無料プロキシリスト はエンドポイントの公開候補を提供します。各アドレスのプロトコルを保持し、check_proxy が正しいトランスポートを使えるようにしてください。

投入バッファが満杯になると、map は結果が返されるまでイテラブルの消費を一時停止します。これはジェネレーターにも当てはまります。

map は依然として入力順に返します。遅い最初のチェックは完了済みの後続結果を保持し、さらなる入力を遅らせます。完了順で処理するには、終了に応じて補充される明示的に上限付きの futures の集合を使ってください。

バッチが結果を返し続けるべき場合は、想定されるネットワーク障害をチェックの内部で処理してください。未処理の例外は、その項目を取り出すときに送出されます。ThreadPoolExecutor の chunksize はこの投入予算を提供せず、以前の Python バージョンには buffersize がありません。

関連記事