As ferskate triedden in lytse proxy-pool diele, kin it kiezen fan in tafallich item twa aktive operaasjes deselde proxy jaan. In wachtrige kin de items hâlde dy't op it stuit te lienen binne:

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)

Bou de wachtrige ien kear, foardat de wurktriedden starte. proxy_urls befettet folsleine einpunt-URL's. Iepenbiere kandidaten binne beskikber yn 'e fergees proxy-list; brûk it protokol en URL-formaat dat fetch_one stipet. De besteande syngrone fetch_one-funksje moat syn netwurkoperaasje foltôgje en elk antwurd slute foardat er weromkomt. Oars soe de liening einigje wylst de ferbining noch dy proxy brûkt.

Queue.get ferwideret atomêr ien beskikber item. In útbrikt pool wachtet ynstee fan hieltiten wer dielde flaggen te skennen. As der yn fiif sekonden gjin item komt, berikt queue.Empty de oanropper; kies foar dat resultaat it belied foar opnij besykjen, mislearjen of annulearjen fan de applikaasje.

It finally-blok jout in krigen item werom nei sukses of in útsûndering. It ferklearret net dat in mislearre einpunt sûn is. Kwarantaine-, ferfangings- en ôfkuolingsbelied hawwe in eksplisite paad nedich ynstee fan stilwei elke proxy fuort te smiten dy't in tydlike flater sjocht.

It fuortheljen fan dûbele identike URL-strings foarkomt dûbele wachtrige-items. Ferskate URL's kinne noch altyd nei deselde fysike proxy of útgong wize; groepearje dy bewust as eksklusiviteit jilde moat foar dat dielde boarne. De wachtrige koördinearret triedden yn dit proses, net wurkers op oare masines.

Relatearre artikelen