大規模プロキシバッチ向け Python 3.14 Executor.map の buffersize
Python 3.14 の Executor.map buffersize を使うと、結果の待機中に max_workers とは独立して入力の消費を停止できます。
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 がありません。