સમવર્તી 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 ટનલ માટે વપરાતો માર્ગ પણ મહત્વપૂર્ણ છે; એક પૂલની સેટિંગને દરેક હોસ્ટ માટે એક વૈશ્વિક સોકેટ કોટા તરીકે વર્ણવવી જોઈએ નહીં.