Lokacin da zare da yawa suka raba ƙaramin tafkin wakilai, zaɓin shigarwar da ba a tsara ba na iya ba wa ayyuka biyu masu aiki wakili ɗaya. Layi na iya riƙe shigarwar da ake da su yanzu don aro:

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)

Gina layin sau ɗaya, kafin fara zaren ma'aikata. proxy_urls ya ƙunshi cikakkun URL na ƙarshen wuri. Ana samun ƴan takara na jama'a a cikin jerin wakili kyauta; yi amfani da ka'idar da tsarin URL da fetch_one ke tallafawa. Dole ne aikin fetch_one na aiki tare ya kammala aikin cibiyar sadarwa kuma ya rufe kowane amsa kafin ya dawo. In ba haka ba, hayar za ta ƙare yayin da haɗin ke amfani da wannan wakili.

Queue.get yana cire shigarwa ɗaya da ake da ita gaba ɗaya. Tafkin da ya ƙare yana jira maimakon sake duba tutoci na gama gari. Idan babu shigarwa cikin daƙiƙa biyar, queue.Empty zai isa mai kira; zaɓi manufar sake gwadawa, gazawa ko sokewa na aikace-aikacen don wannan sakamakon.

Finally block yana mayar da shigarwar da aka samu bayan nasara ko keɓewa. Ba ya bayyana cewa ƙarshen wuri da ya kasa yana da lafiya. Manufofin keɓewa, maye gurbi da sanyaya suna buƙatar hanya bayyananna maimakon jefar da kowane wakili da ya ga kuskure na ɗan lokaci a hankali.

Cire kwafin igiyoyin URL iri ɗaya yana hana shigarwar layi biyu. URL daban-daban na iya har yanzu nufin wakili na zahiri ɗaya ko fita; haɗa su da gangan idan keɓancewar dole ya shafi wannan albarkatun da aka raba. Layin yana daidaita zaren cikin wannan tsari, ba ma'aikata a wasu injuna ba.

Labarai masu alaƙa