जब कई थ्रेड एक छोटा प्रॉक्सी पूल साझा करते हैं, तो यादृच्छिक प्रविष्टि चुनने से दो सक्रिय ऑपरेशनों को एक ही प्रॉक्सी मिल सकती है। एक 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)

worker थ्रेड शुरू करने से पहले queue एक बार बनाएँ। proxy_urls में पूर्ण endpoint URL हैं। सार्वजनिक उम्मीदवार मुफ़्त प्रॉक्सी सूची में उपलब्ध हैं; वह प्रोटोकॉल और URL प्रारूप उपयोग करें जिसे fetch_one समर्थित करता है। मौजूदा सिंक्रोनस fetch_one फ़ंक्शन को लौटने से पहले अपना नेटवर्क ऑपरेशन पूरा करना और कोई भी प्रतिक्रिया बंद करनी चाहिए। अन्यथा लीज़ तब समाप्त होगी जब कनेक्शन अभी भी उस प्रॉक्सी का उपयोग कर रहा हो।

Queue.get एक उपलब्ध प्रविष्टि को परमाण्विक रूप से हटाता है। समाप्त पूल बार-बार साझा फ़्लैग स्कैन करने के बजाय प्रतीक्षा करता है। यदि पाँच सेकंड में कोई प्रविष्टि नहीं आती, तो queue.Empty कॉलर तक पहुँचता है; उस परिणाम के लिए एप्लिकेशन की पुनः प्रयास, विफलता या रद्द करने की नीति चुनें।

finally ब्लॉक सफलता या अपवाद के बाद अधिग्रहित प्रविष्टि लौटाता है। यह घोषित नहीं करता कि विफल endpoint स्वस्थ है। क्वारंटीन, प्रतिस्थापन और कूलडाउन नीतियों को स्पष्ट मार्ग चाहिए, न कि अस्थायी त्रुटि देखने वाली हर प्रॉक्सी को चुपचाप त्याग देना।

समान URL स्ट्रिंग्स को डुप्लिकेट हटाना queue में दोहरी प्रविष्टियाँ रोकता है। भिन्न URL अभी भी एक ही भौतिक प्रॉक्सी या एग्ज़िट को संदर्भित कर सकते हैं; यदि उस साझा संसाधन पर अनन्यता लागू होनी चाहिए तो उन्हें जानबूझकर समूहित करें। queue इस प्रक्रिया के थ्रेड्स का समन्वय करता है, अन्य मशीनों के worker का नहीं।

संबंधित लेख