Partekatu proxy multzo bat Python harien artean ilara batekin
Erabili sinkronizatutako ilara bat eta finally bloke bat proxy bat erreserbatzeko hari eragiketa sinkrono baterako eta gero itzultzeko.
Hainbat harik proxy multzo txiki bat partekatzen dutenean, ausazko sarrera bat hautatzeak bi eragiketa aktibori proxy bera eman diezaieke. Ilara batek maileguan hartzeko eskuragarri dauden sarrerak gorde ditzake:
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)
Eraiki ilara behin, lan-hariak hasi aurretik. proxy_urls-ek amaierako puntuen URL osoak ditu. Hautagai publikoak proxy doakoen zerrendan daude; erabili fetch_one-k onartzen duen protokoloa eta URL formatua. Dagoen fetch_one funtzio sinkronoak bere sare-eragiketa amaitu eta edozein erantzun itxi behar du itzuli aurretik. Bestela, mailegua amaitu egingo litzateke konexioak proxy hori oraindik erabiltzen duen bitartean.
Queue.get-ek eskuragarri dagoen sarrera bat atomikoki kentzen du. Agortutako multzo batek itxaron egiten du partekatutako banderak behin eta berriz eskaneatu beharrean. Bost segundoan sarrerarik iristen ez bada, queue.Empty deitzailera iristen da; aukeratu aplikazioaren berriro saiatzeko, huts egiteko edo ezeztatzeko politika emaitza horretarako.
Finally blokeak eskuratutako sarrera itzultzen du arrakasta edo salbuespen baten ondoren. Ez du adierazten huts egindako amaierako puntu bat osasuntsua denik. Berrogeialdi, ordezkapen eta hozte politikak bide esplizitu bat behar dute, errore iragankorra ikusten duen proxy bakoitza isilka baztertu beharrean.
URL kate berdinak deduplikatzeak ilarako sarrera bikoiztuak saihesten ditu. URL desberdinek proxy fisiko berari edo irteerari egin diezaiokete oraindik; multzokatu itzazu nahita baztertzeak baliabide partekatu horri aplikatu behar badio. Ilarak prozesu honetako hariak koordinatzen ditu, ez beste makinetako langileak.