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 নেই।

সম্পর্কিত নিবন্ধ