प्रत्येक 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 साठी नवीन मर्यादित प्रयत्न तयार केला पाहिजे. सामायिक यादीतून नोंदी काढून टाकणाऱ्या आवर्ती पुनःप्रयत्न कॉल्स टाळा: दुसरा कर्मचारी त्यातून निवडत असू शकतो, आणि संपलेल्या यादीला अजूनही स्पष्ट निकाल हवा असतो.