വർക്കർ പൂൾ സൃഷ്ടിക്കുന്നത് ഡൗൺലോഡ് ചെയ്ത പേജുകൾ വിളിക്കുന്നയാൾക്ക് നൽകുന്നില്ല. സമർപ്പിച്ച ജോലി തിരികെ നൽകുന്ന മൂല്യങ്ങൾ സൂക്ഷിച്ച് ഉപയോഗിക്കുക:

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 ടണലുകൾക്ക് ഉപയോഗിക്കുന്ന പാതയും പ്രധാനമാണ്; ഒരു പൂളിന്റെ ക്രമീകരണം ഓരോ ഹോസ്റ്റിനുമുള്ള ഒരൊറ്റ ആഗോള സോക്കറ്റ് ക്വോട്ടയായി വിവരിക്കരുത്.

അനുബന്ധ ലേഖനങ്ങൾ