পুলের map একবারে একটি আইটেম কর্মীর কাছে পাঠায়। সেই আইটেমটিকে সম্পূর্ণ কাজ করুন, URL ও নির্বাচিত প্রক্সি সহ, যাতে কর্মী পরিবর্তনশীল বৈশ্বিক তালিকা থেকে তার পথ অনুমান না করে।

সীমিত urls-এর জন্য বৈধ প্রক্সি URL-এর একটি অখালি তালিকা দিন। পাবলিক HTTP প্রার্থীরা HTTP প্রক্সি তালিকা-এ পাওয়া যায়:

from concurrent.futures import ThreadPoolExecutor
from itertools import cycle
import requests

def fetch(job):
    url, proxy_url = job
    proxies = {"http": proxy_url, "https": proxy_url}
    with requests.get(url, proxies=proxies, timeout=(5, 15)) as response:
        response.raise_for_status()
        return url, response.text

if not proxy_urls:
    raise ValueError("No proxy endpoints were supplied")

jobs = zip(urls, cycle(proxy_urls))
with ThreadPoolExecutor(max_workers=5) as executor:
    for url, body in executor.map(fetch, jobs):
        handle_result(url, body)

urls, proxy_urls এবং handle_result অ্যাপ্লিকেশন সরবরাহ করে। সমন্বয়কারী পুনরাবৃত্ত ক্রমে এন্ডপয়েন্ট নির্ধারণ করে; প্রতিটি কর্মী একটি নির্দিষ্ট জোড়া পায়। ফলাফল পুনরাবৃত্তি করলে কর্মীর ব্যতিক্রমও প্রকাশ পায়।

পাঁচজন কর্মী সক্রিয় কাজ সীমিত করে, প্রতি প্রক্সিতে সক্রিয় কাজ নয়। তালিকায় দুটি এন্ডপয়েন্ট থাকলে একাধিক কাজ একই এন্ডপয়েন্ট একসাথে ব্যবহার করতে পারে। প্রয়োজন হলে প্রতি এন্ডপয়েন্টের জন্য আলাদা ক্ষমতা নিয়ম যোগ করুন। প্রতি এন্ডপয়েন্ট URL-এ একটি সক্রিয় কাজের জন্য, সিঙ্ক্রোনাইজড কিউ ইজারা প্রতিটি এন্ট্রি সংরক্ষণ ও ফিরিয়ে দিতে পারে।

পুনরায় চেষ্টা একই URL-এর জন্য নতুন সীমিত চেষ্টা তৈরি করা উচিত। শেয়ার করা তালিকা থেকে এন্ট্রি সরানো পুনরাবৃত্ত পুনঃচেষ্টা কল এড়িয়ে চলুন: অন্য একজন কর্মী সেখান থেকে নির্বাচন করতে পারে, এবং নিঃশেষিত তালিকার এখনও একটি স্পষ্ট ফলাফল দরকার।

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