Rhannu cronfa wythiennol rhwng edau Python gyda chiw
Defnyddiwch giw cydamserol a bloc finally i gadw un procsi ar gyfer gweithrediad edau cydamserol a'i ddychwelyd wedyn.
Pan fo sawl edau yn rhannu cronfa fach o brocsis, gall dewis cofnod ar hap roi'r un procsi i ddau weithrediad gweithredol. Gall ciw ddal y cofnodion sydd ar gael i'w benthyca ar hyn o bryd:
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)
Adeiladwch y ciw unwaith, cyn cychwyn yr edau gweithio. Mae proxy_urls yn cynnwys URLau terfynbwynt cyflawn. Mae ymgeiswyr cyhoeddus ar gael yn y rhestr procsis am ddim; defnyddiwch y protocol a'r fformat URL y mae fetch_one yn eu cefnogi. Rhaid i'r swyddogaeth fetch_one gydamserol bresennol orffen ei gweithrediad rhwydwaith a chau unrhyw ymateb cyn dychwelyd. Fel arall byddai'r les yn dod i ben tra bod y cysylltiad yn dal i ddefnyddio'r procsi hwnnw.
Mae Queue.get yn tynnu un cofnod sydd ar gael yn atomig. Mae cronfa wedi'i dihysbyddu yn aros yn hytrach nag ail-sganio baneri a rennir. Os na fydd cofnod yn cyrraedd o fewn pum eiliad, mae queue.Empty yn cyrraedd y galwr; dewiswch bolisi ailgynnig, methiant neu ganslo'r cymhwysiad ar gyfer y canlyniad hwnnw.
Mae'r bloc finally yn dychwelyd cofnod a gafwyd ar ol llwyddiant neu eithriad. Nid yw'n datgan bod terfynbwynt sydd wedi methu yn iach. Mae angen llwybr penodol ar bolisïau cwarantin, disodli ac oeri yn hytrach na thaflu bob procsi sy'n gweld gwall dros dro yn dawel.
Mae dad-ddyblygu llinynnau URL union yn atal cofnodion ciw dyblyg. Gall URLau gwahanol o hyd gyfeirio at yr un procsi corfforol neu allfa; grwpiwch y rheini'n fwriadol os oes rhaid i gyfyngiad fod yn berthnasol i'r adnodd a rennir hwnnw. Mae'r ciw yn cydlynu edau yn y broses hon, nid gweithwyr ar beiriannau eraill.