वर्कर पूल तयार केल्याने कॉलरला डाउनलोड केलेली पृष्ठे मिळत नाहीत. सबमिट केलेल्या कामाने परत दिलेली मूल्ये ठेवा आणि वापरा:

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 बोगद्यांसाठी वापरला जाणारा मार्ग देखील महत्त्वाचा आहे; एका पूलची सेटिंग प्रत्येक होस्टसाठी एक जागतिक सॉकेट कोटा म्हणून वर्णन करू नये.

संबंधित लेख