ఏకకాలిక urllib3 ప్రాక్సీ అభ్యర్థనల నుండి ప్రతి ఫలితాన్ని సేకరించండి
వర్కర్ థ్రెడ్ల మధ్య కాన్ఫిగర్ చేసిన ProxyManagerని పంచుకోండి, ఎగ్జిక్యూటర్ ఫలిత పునరావృత్తిని వాడండి మరియు పూల్ నిలుపుదలని కనెక్షన్ పరిమితి నుండి వేరు చేయండి.
వర్కర్ పూల్ సృష్టించడం డౌన్లోడ్ చేసిన పేజీలను కాలర్కు ఇవ్వదు. సమర్పించిన పని తిరిగి ఇచ్చే విలువలను ఉంచి వాడండి:
from concurrent.futures import ThreadPoolExecutor
import urllib3
manager = urllib3.ProxyManager(
'http://proxy.example:8080',
maxsize=4,
block=True,
)
def fetch(url):
response = manager.request(
'GET', url, timeout=urllib3.Timeout(connect=5, read=15),
)
return url, response.status, response.data
try:
with ThreadPoolExecutor(max_workers=4) as workers:
results = list(workers.map(fetch, urls))
finally:
manager.clear()ఈ భాగం పరిమిత URL జాబితా మరియు సాధారణ ప్రతిస్పందన పరిమాణాలను ఊహిస్తుంది. ప్రాక్సీ ప్రామాణీకరణ లేకుండా అనుమతించబడిన పబ్లిక్-URL తనిఖీల కోసం HTTP ప్రాక్సీ జాబితా నుండి ఒక అభ్యర్థి మేనేజర్ యొక్క నమూనా HTTP ముగింపు బిందువును భర్తీ చేయగలదు. ప్రతి ఫలితం దాని URLని కలిగి ఉంటుంది, తద్వారా కాలర్ స్థితి మరియు బాడీని సరైన అభ్యర్థనతో అనుసంధానించవచ్చు. map ఇన్పుట్ క్రమంలో ఫలితాలను తిరిగి ఇస్తుంది; వర్కర్లోని మినహాయింపు ఆ ఫలితాన్ని తీసుకున్నప్పుడు లేవనెత్తబడుతుంది.
కాన్ఫిగర్ చేసిన ProxyManager అభ్యర్థనల కోసం కనెక్షన్ పూలింగ్ను కలిగి ఉంటుంది. ఇక్కడ ఉపయోగించిన డిఫాల్ట్ ప్రీలోడెడ్ ప్రతిస్పందన మోడ్తో, urllib3 బాడీని చదివి కనెక్షన్ను దాని పూల్కు తిరిగి ఇస్తుంది. స్ట్రీమింగ్ వెర్షన్కు స్పష్టమైన వినియోగం మరియు కనెక్షన్ విడుదల అవసరం.
maxsize సాధారణంగా నిలుపుకున్న పునర్వినియోగ కనెక్షన్లను నియంత్రిస్తుంది, తెరిచిన ప్రతి సాకెట్పై కఠినమైన పరిమితి కాదు. block=True సంబంధిత పూల్ ప్రవర్తనను మారుస్తుంది, తద్వారా కాలర్లు ఆ పూల్ పరిమితి దాటి అదనపు తెరవడం బదులు ఖాళీ కనెక్షన్ కోసం వేచి ఉంటారు.
ఈ ఉదాహరణలో వర్కర్ సంఖ్య ఏకకాలిక కాల్లను పరిమితం చేస్తుంది. అనేక గమ్యస్థానాలతో, పూల్ లేఅవుట్ మరియు HTTPS సొరంగాల కోసం ఉపయోగించే మార్గం కూడా ముఖ్యం; ఒక పూల్ సెట్టింగ్ను ప్రతి హోస్ట్కు ఒకే ప్రపంచ సాకెట్ కోటాగా వర్ణించకూడదు.