Python تېمىلىرى ئارىسىدا پروكسىي ئامبىرىنى نۆۋەت بىلەن ھەمبەھرىلىش
تىزگىنلەنگەن نۆۋەت ۋە finally بۆلىكىنى ئىشلىتىپ بىر پروكسىينى تىزگىنلەنگەن تېما مەشغۇلاتى ئۈچۈن زاپاسلاپ، ئاندىن قايتۇرۇڭ.
بىر قانچە تېما كىچىك پروكسىي ئامبىرىنى ھەمبەھرىلىگەندە، تاسادىپىي تاللانغان تۇنۇش ئىككى ئاكتىپ مەشغۇلاتقا ئوخشاش پروكسىينى بېرىشى مۇمكىن. نۆۋەت ھازىر قەرز ئېلىشقا تەييار بولغان تۇنۇشلارنى ساقلىيالايدۇ:
from contextlib import contextmanager
from queue import Queue
available = Queue()
for endpoint in dict.fromkeys(proxy_urls):
available.put(endpoint)
@contextmanager
def borrow_proxy():
endpoint = available.get(timeout=5)
try:
yield endpoint
finally:
available.put(endpoint)
def process_url(url):
with borrow_proxy() as endpoint:
return fetch_one(url, endpoint)
نۆۋەتنى خىزمەتچى تېمىلارنى باشلاشتىن بۇرۇن بىر قېتىم قۇرۇڭ. proxy_urls تولۇق endpoint URL لارنى ئۆز ئىچىگە ئالىدۇ. ئوچۇق نامزاتلار ھەقسىز پروكسىي تىزىملىكىدە بار؛ fetch_one قوللايدىغان پروتوكول ۋە URL فورماتىنى ئىشلىتىڭ. مەۋجۇت تىزگىنلەنگەن fetch_one فۇنكسىيەسى قايتىشتىن بۇرۇن تور مەشغۇلاتىنى تاماملاپ، ھەر قانداق ئىنكاسنى تاقىشى كېرەك. بولمىسا ئۇلىنىش تېخى شۇ پروكسىينى ئىشلىتىۋاتقاندا ئىجارە ئاخىرلىشىدۇ.
Queue.get بىر تەييار تۇنۇشنى ئاتوملۇق ھالدا چىقىرىۋېتىدۇ. تۈگەنگەن ئامبار ھەمبەھرىلەنگەن بايراقلارنى قايتا-قايتا سكانلىغاندىن كۆرە كۈتىدۇ. ئەگەر بەش سېكۇنت ئىچىدە تۇنۇش كەلمىسە، queue.Empty چاقىرغۇچىغا يېتىدۇ؛ بۇ نەتىجە ئۈچۈن پروگراممىنىڭ قايتا سىناش، مەغلۇبىيەت ياكى بىكار قىلىش سىياسىتىنى تاللاڭ.
finally بۆلىكى مۇۋەپپەقىيەت ياكى ئىستىسنادىن كېيىن ئېلىنغان تۇنۇشنى قايتۇرىدۇ. ئۇ مەغلۇپ بولغان endpoint نىڭ ساغلام دېگەنلىكىنى جاكارلىمايدۇ. كارانتىن، ئالماشتۇرۇش ۋە سوۋۇتۇش سىياسەتلىرىگە ئېنىق يول كېرەك، ۋاقىتلىق خاتالىق كۆرگەن ھەر بىر پروكسىينى جىمجىت تاشلاشنىڭ ئورنىغا.
ئوخشاش URL تىزىقلىرىنىڭ تەكرارلىنىشىنى چىقىرىۋېتىش نۆۋەتتە قوش تۇنۇش پەيدا بولۇشىنىڭ ئالدىنى ئالىدۇ. ئوخشىمىغان URL لار يەنىلا ئوخشاش جىسمانىي پروكسىي ياكى چىقىش نى كۆرسىتەلەيدۇ؛ ئەگەر ئالاھىدەلىك شۇ ھەمبەھرىلەنگەن مەنبەگە قوللىنىلىشى كېرەك بولسا، ئۇلارنى ئەجەب تۈردە گۇرۇپپىلاڭ. نۆۋەت بۇ جەرياندىكى تېمىلارنى ماسلاشتۇرىدۇ، باشقا ماشىنىلاردىكى خىزمەتچىلەرنى ئەمەس.