د queue په مرسته د Python تارونو ترمنځ د پروکسي زېرمه شریکه کړئ
د همغږي شوي queue او finally بلاک په کارولو سره د یوې همغږې تارونکې عملیات لپاره یو پروکسي خوندي کړئ او بیا یې بیرته راوګرځوئ.
کله چې څو تارونه یوه کوچنۍ د پروکسي زېرمه شریکوي، د ناڅاپي ننوتنې ټاکل کېدای شي دوو فعالو عملیاتو ته یو شان پروکسي ورکړي. queue کولای شي هغه ننوتنې وساتي چې اوس د پور اخیستلو لپاره شته:
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)
queue یو ځل جوړه کړئ، مخکې له دې چې کاري تارونه پیل شي. proxy_urls بشپړ endpoint URL لري. عامه نوماندان د وړیا پروکسي لیست کې شته; هغه پروتوکول او URL بڼه وکاروئ چې fetch_one یې ملاتړ کوي. شته همغږی fetch_one فنکشن باید د بیرته راګرځېدو مخکې خپله شبکه يي عملیات پای ته ورسوي او هر ځواب وتړي. که نه نو اجاره به هغه وخت پای ته ورسېږي چې اړیکه لا هم هغه پروکسي کاروي.
Queue.get یوه شته ننوتنه په اتومي ډول لرې کوي. خالي شوې زېرمه د شریکو بیرغونو د تکراري سکن کولو پرځای انتظار کوي. که په پنځو ثانیو کې هېڅ ننوتنه رانشي، queue.Empty بلوونکي ته رسېږي; د دې پایلې لپاره د اپلیکیشن د بیا هڅه، ناکامي یا لغوه کولو تګلاره وټاکئ.
finally بلاک د بریالیتوب یا استثنا وروسته ترلاسه شوې ننوتنه بیرته راګرځوي. دا اعلان نه کوي چې ناکام endpoint روغ دی. د قرنطین، بدلون او سوړولو تګلارو ته روښانه لار ته اړتیا ده، نه دا چې هره پروکسي چې لنډمهاله تېروتنه ویني په خاموشۍ وغورځول شي.
د ورته URL تارونو نقلونه لرې کول په queue کې دوه ځله ننوتنې مخنیوی کوي. بېلابېل URLونه لا هم کولای شي یو فزیکي پروکسي یا وتل ته اشاره وکړي; که ځانګړتیا باید په هغه شریک شوي سرچینې باندې پلي شي، هغوی په قصدي ډول ډله کړئ. queue په دې بهیر کې تارونه همغږي کوي، نه په نورو ماشینونو کې کارګران.