Deil ein proxy-pulja millum Python-treðir við eini kø
Nýt eina samstillaða kø og eina finally-blokk at halda einum proxy til eina samstillaða treðarstøð og lata hann aftur eftir tað.
Tá fleiri treðir deila eini lítlari proxy-pulju, kann ein tilvildarligur upptøka geva tveimum virknum støðum sama proxy. Ein kø kann halda upptøkurnar, sum eru tøkt at lána nú:
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)
Bygg køna eina ferð, áðrenn arbeiðstreðirnar byrja. proxy_urls hevur fullkomnar endapunkts-URLir. Almennir kandidatar eru tøktir í listanum yvir ókeypis proxyr; nýt tað protokoll og tað URL-format, sum fetch_one veitir stuðul til. Tann verandi samstillaða fetch_one-funktiónin má gera netstøð sína lidna og lata eitt svar aftur, áðrenn hon kemur aftur. Annars endar lánið, meðan sambandið enn nýtir tann proxyin.
Queue.get tekur eina tøka upptøku burtur atómt. Ein tømd pulja bíðar heldur enn at skanna deildar fløgg aftur og aftur. Kemur ongin upptøka innan fimm sekund, nær queue.Empty fram til kallaran; vel endurroyndar-, miseydnaðar- ella avlýsingarstevnuna hjá tólunum fyri tað úrslitið.
Finally-blokkin letur eina fingna upptøku aftur eftir eydnu ella undantøku. Hon váttar ikki, at ein miseydnaður endapunktur er heilsoður. Karantenu-, skiftis- og kølingarstevnur krevja ein greiðan veg heldur enn at tiga og kasta hvønn proxy burtur, sum sær eina fyribils villu.
At taka dupultar somu URL-streingir burtur forðar dupultum kø-upptøkum. Ymsar URLir kunnu framvegis vísa á sama fysiska proxy ella útgongd; bólka tær við vilja, um einansrættur skal galda fyri tað deildu tilfeingið. Køin samskipar treðir í hesum ferlinum, ikki arbeiðarar á øðrum maskinum.