ብዙ ክርዎች አንድ ትንሽ የፕሮክሲ ገንዳ ሲጋሩ፣ በዘፈቀደ የመረጡት ግቤት ሁለት ንቁ ስራዎች ተመሳሳይ ፕሮክሲ ሊሰጣቸው ይችላል። ወረፋ አሁን ለመውሰድ ያሉትን ግቤቶች መያዝ ይችላል፦

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 ሙሉ የመጨረሻ ነጥብ URLዎችን ይዟል። ይፋዊ እጩዎች በነጻ የፕሮክሲ ዝርዝር ውስጥ ይገኛሉ፤ fetch_one የሚደግፈውን ፕሮቶኮል እና URL ቅርጸት ይጠቀሙ። ያለው የተመሳሰለ fetch_one ተግባር ከመመለሱ በፊት የኔትወርክ ስራውን ጨርሶ ማንኛውንም ምላሽ መዝጋት አለበት። አለበለዚያ ግንኙነቱ አሁንም ያንን ፕሮክሲ እየተጠቀመ ሳለ ውሉ ያበቃል።

Queue.get አንድ ያለ ግቤት በአቶሚክ መንገድ ያስወግዳል። የተጠመቀ ገንዳ የጋራ ባንዲራዎችን ተደጋግሞ ከመቃኘት ይልቅ ይጠብቃል። በአምስት ሰከንድ ውስጥ ግቤት ካልመጣ፣ queue.Empty ወደ ጠሪው ይደርሳል፤ ለዚያ ውጤት የመተግበሪያውን የድጋሚ ሙከራ፣ የሽንፈት ወይም የስረዛ ፖሊሲ ይምረጡ።

finally ብሎክ ከስኬት ወይም ከልዩነት በኋላ የተወሰደውን ግቤት ይመልሳል። ያልተሳካ መጨረሻ ነጥብ ጤናማ ነው ብሎ አይናገርም። የማግለል፣ የመተካት እና የማቀዝቀዝ ፖሊሲዎች ጊዜያዊ ስህተት የሚያዩትን ፕሮክሲ ሁሉ በጸጥታ ከመጣል ይልቅ ግልጽ መንገድ ይፈልጋሉ።

ተመሳሳይ የURL ሕብረቁምፊዎችን ማጽዳት የተደጋገሙ የወረፋ ግቤቶችን ይከላከላል። የተለያዩ URLዎች አሁንም አንድ አካላዊ ፕሮክሲ ወይም መውጫ ሊያመለክቱ ይችላሉ፤ ልዩነት በዚያ የጋራ ሀብት ላይ መተግበር ካለበት እነዚህን ሆን ብለው ይሰብስቡ። ወረፋው በዚህ ሂደት ውስጥ ያሉ ክሮችን ያስተባብራል፣ በሌሎች ማሽኖች ላይ ያሉ ሰራተኞችን አይደለም።

ተዛማጅ ጽሑፎች