ప్రతి Python ThreadPoolExecutor పనికి URL మరియు ప్రాక్సీ కేటాయించండి
పైథాన్ అభ్యర్థన పనిని సమర్పించే ముందు ప్రాక్సీ కేటాయించండి, పంచుకున్న మారే ఎంపిక స్థితి కోసం కార్మికులు పోటీపడటానికి అనుమతించడం బదులు.
పూల్ 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 కోసం కొత్త పరిమిత ప్రయత్నాన్ని సృష్టించాలి. పంచుకున్న జాబితా నుండి ఎంట్రీలను తొలగించే పునరావృత పునఃప్రయత్న కాల్లను నివారించండి: మరో కార్మికుడు దాని నుండి ఎంచుకుంటూ ఉండవచ్చు, మరియు ఖాళీ అయిన జాబితాకు ఇప్పటికీ స్పష్టమైన ఫలితం అవసరం.