የሠራተኛ ገንዳ መፍጠር የተወረዱትን ገጾች ለጠሪው አይሰጥም። በተላከው ሥራ የሚመለሱትን እሴቶች ይያዙ እና ይጠቀሙባቸው፦

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 መሿለኪያዎች የሚያገለግለው መንገድም ያስፈልጋሉ፤ የአንድ ገንዳ ቅንብር ለእያንዳንዱ አስተናጋጅ አንድ ዓለም አቀፍ የሶኬት ኮታ ተብሎ መግለጽ የለበትም።

ተዛማጅ ጽሑፎች