buffersize در Executor.map پایتون 3.14 برای دستههای بزرگ پروکسی
از buffersize در Executor.map پایتون 3.14 استفاده کنید تا مصرف ورودی را هنگام انتظار نتایج متوقف کنید، مستقل از max_workers.
max_workers=8 رشتههای اجرایی را محدود میکند. اما مانع از آن نمیشود که یک حلقه ارسال جداگانه برای هر نقطه پایانی در ورودی عظیم یک Future بسازد.
پایتون 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 استفاده کنید که با پایان یافتن پر میشود.
اگر دسته باید به تحویل نتایج ادامه دهد، خطاهای شبکه مورد انتظار را درون بررسی مدیریت کنید. وقتی آن مورد بازیابی شود، استثنای مدیریتنشده مطرح میشود. chunksize در ThreadPoolExecutor این بودجه ارسال را فراهم نمیکند و نسخههای پیشین پایتون buffersize ندارند.