பல thread-கள் சிறிய proxy pool-ஐப் பகிரும்போது, சீரற்ற உள்ளீட்டைத் தேர்ந்தெடுப்பது இரண்டு செயலில் உள்ள செயல்பாடுகளுக்கு ஒரே proxy-ஐ வழங்கலாம். ஒரு 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)

பணியாளர் thread-களைத் தொடங்குவதற்கு முன் queue-ஐ ஒரு முறை உருவாக்கவும். proxy_urls முழுமையான endpoint URL-களைக் கொண்டுள்ளது. பொது வேட்பாளர்கள் இலவச proxy பட்டியலில் கிடைக்கின்றன; fetch_one ஆதரிக்கும் நெறிமுறை மற்றும் URL வடிவத்தைப் பயன்படுத்தவும். தற்போதைய ஒத்திசைவான fetch_one சார்பு திரும்பும் முன் அதன் பிணைய செயல்பாட்டை முடித்து எந்தப் பதிலையும் மூட வேண்டும். இல்லையெனில் இணைப்பு அந்த proxy-ஐ இன்னும் பயன்படுத்தும்போதே குத்தகை முடிவடையும்.

Queue.get ஒரு கிடைக்கும் உள்ளீட்டை அணுவாக நீக்குகிறது. காலியான pool மீண்டும் மீண்டும் பங்கு கொடிகளை ஸ்கேன் செய்வதற்குப் பதிலாக காத்திருக்கிறது. ஐந்து வினாடிகளில் எந்த உள்ளீடும் வரவில்லை என்றால் queue.Empty அழைப்பவரை அடையும்; அந்த முடிவுக்கு பயன்பாட்டின் மறுமுயற்சி, தோல்வி அல்லது ரத்துசெயல் கொள்கையைத் தேர்ந்தெடுக்கவும்.

finally தொகுதி வெற்றி அல்லது விதிவிலக்குக்குப் பிறகு பெறப்பட்ட உள்ளீட்டைத் திருப்பித் தருகிறது. தோல்வியடைந்த endpoint ஆரோக்கியமானது என்று அது அறிவிக்கவில்லை. தனிமைப்படுத்தல், மாற்று மற்றும் குளிர்விப்பு கொள்கைகளுக்கு தெளிவான பாதை தேவை, தற்காலிக பிழையைக் காணும் ஒவ்வொரு proxy-ஐயும் அமைதியாக தூக்கி எறிவதற்குப் பதிலாக.

ஒரே URL சரங்களின் நகல்களை நீக்குவது queue-இல் இரட்டை உள்ளீடுகளைத் தடுக்கிறது. வெவ்வேறு URL-கள் இன்னும் ஒரே இயற்பியல் proxy அல்லது வெளியேற்றம்ஐக் குறிக்கலாம்; அந்தப் பங்கிடப்பட்ட வளத்திற்கு பிரத்தியேகத்தன்மை பொருந்த வேண்டுமானால் அவற்றை வேண்டுமென்றே தொகுக்கவும். queue இந்தச் செயல்முறையில் உள்ள thread-களை ஒருங்கிணைக்கிறது, பிற இயந்திரங்களில் உள்ள பணியாளர்களை அல்ல.

தொடர்புடைய கட்டுரைகள்