समवर्ती urllib3 प्रोक्सी अनुरोधहरूबाट प्रत्येक नतिजा सङ्कलन गर्नुहोस्
कार्यकर्ता थ्रेडहरूबीच कन्फिगर गरिएको ProxyManager साझा गर्नुहोस्, executor को नतिजा इटरेटर प्रयोग गर्नुहोस् र पूल रिटेन्सनलाई जडान सीमाबाट छुट्याउनुहोस्।
कार्यकर्ता पूल सिर्जना गर्दा कलरलाई डाउनलोड गरिएका पृष्ठहरू दिइँदैन। पेस गरिएको कामले फर्काउने मानहरू राख्नुहोस् र प्रयोग गर्नुहोस्:
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 सुरुङका लागि प्रयोग गरिने मार्ग पनि महत्त्वपूर्ण हुन्छ; एउटा पूलको सेटिङलाई प्रत्येक होस्टका लागि एउटै विश्वव्यापी सकेट कोटाका रूपमा वर्णन गर्नु हुँदैन।