قوشنا 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 تونېللىرى ئۈچۈن ئىشلىتىلگەن يولمۇ مۇھىم؛ بىر گۈلەكنىڭ تەڭشىكىنى ھەر بىر ساھىبخان ئۈچۈن بىر دۇنياۋى سوكېت كۋوتىسى دەپ تەسۋىرلەش كېرەك ئەمەس.