ہر Python ThreadPoolExecutor کام کو URL اور پراکسی تفویض کریں
Python درخواست کام جمع کرانے سے پہلے پراکسی تفویض کریں، کارکنوں کو مشترکہ بدلتے ہوئے انتخاب کی حالت پر مقابلہ کرنے دینے کے بجائے۔
پول کا 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 کے لیے نئی محدود کوشش بنانی چاہیے۔ مشترکہ فہرست سے اندراجات ہٹانے والی تکرار والی دوبارہ کوشش کی کالوں سے بچیں: کوئی دوسرا کارکن اس میں سے انتخاب کر رہا ہو سکتا ہے، اور ختم شدہ فہرست کو اب بھی واضح نتیجہ درکار ہے۔