Python 3.14 Executor.map buffersize för stora proxy-batcher
Använd Python 3.14 Executor.map buffersize för att pausa inmatningsförbrukningen medan resultat väntar, oberoende av max_workers.
max_workers=8 begränsar de körande trådarna. Det hindrar dock inte en separat insändningsloop från att skapa en Future för varje slutpunkt i en enorm indata.
Python 3.14 lägger till ett begränsat förinläsningsalternativ:
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 är den befintliga synkrona kontrollen med nätverkstidsgränser och städning; record_result hanterar den observering som returneras. Värdena 8 och 24 är exempelbudgetar. gratis proxylista tillhandahåller offentliga kandidater för slutpunkter; behåll deras protokoll med varje adress så att check_proxy kan använda rätt transport.
När insändningsbufferten fylls pausar map förbrukningen av det itererbara tills resultat levereras. Det gäller även generatorer.
map levererar fortfarande i inmatningsordning: en långsam tidig kontroll kan hålla kvar färdiga senare resultat och fördröja ytterligare indata. För bearbetning i slutförandeordning, använd en uttryckligen begränsad uppsättning futures som fylls på när de slutförs.
Hantera förväntade nätverksfel inuti kontrollen om batchen ska fortsätta leverera resultat. Ett ohanterat undantag kastas när det objektet hämtas. chunksize i ThreadPoolExecutor ger inte denna insändningsbudget, och äldre Python-versioner saknar buffersize.