Amikor több szál osztozik egy kis proxykészleten, egy véletlenszerű bejegyzés kiválasztása ugyanazt a proxyt adhatja két aktív műveletnek. Egy sor tárolhatja a jelenleg kölcsönzésre elérhető bejegyzéseket:

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)

Építse fel a sort egyszer, a munkaszálak indítása előtt. A proxy_urls teljes végpont URL-eket tartalmaz. A nyilvános jelöltek a ingyenes proxylistán érhetők el; használja azt a protokollt és URL-formátumot, amelyet a fetch_one támogat. A meglévő szinkron fetch_one függvénynek visszatérés előtt be kell fejeznie a hálózati műveletét, és be kell zárnia minden választ. Ellenkező esetben a kölcsönzés akkor ér véget, amikor a kapcsolat még azt a proxyt használja.

A Queue.get atomikusan eltávolít egy elérhető bejegyzést. A kimerült készlet várakozik, ahelyett hogy ismételten megosztott jelzőket vizsgálna. Ha öt másodpercen belül nem érkezik bejegyzés, a queue.Empty eléri a hívót; válassza ki az alkalmazás újrapróbálkozási, hiba- vagy megszakítási szabályát erre az eredményre.

A finally blokk visszaadja a megszerzett bejegyzést siker vagy kivétel után. Nem jelenti ki, hogy a sikertelen végpont egészséges. A karantén-, csere- és lehűlési szabályoknak kifejezett útra van szükségük, ahelyett hogy csendben eldobnák minden proxyt, amely átmeneti hibát lát.

Az azonos URL-karakterláncok deduplikálása megakadályozza a duplikált sorbejegyzéseket. A különböző URL-ek továbbra is ugyanarra a fizikai proxyra vagy kijáratra utalhatnak; csoportosítsa őket szándékosan, ha a kizárólagosságnak arra a megosztott erőforrásra kell vonatkoznia. A sor az e folyamaton belüli szálakat hangolja össze, nem más gépeken futó munkásokat.

Kapcsolódó cikkek