Iarrtasan proxy a dh'fhàilligeas a làimhseachadh le asyncio.gather
Sgrùdaich na h-eisgeulan a bheir asyncio.gather air ais agus cùm gach toradh ceangailte ris an proxy a thagh thu.
Cuiridh asyncio.gather le return_exceptions=True eisgeulan nan gnìomh a-steach don liosta thoraidhean aige. Mar sin chan eil feitheamh air a' bhuidheann gun eisgeul a' ciallachadh gun do shoirbhich a h-uile iarrtas proxy.
Cùm an ceann-uidhe agus am proxy a thagh thu ri taobh nan awaitables a chaidh a chur a-steach, agus an uair sin sgrùdaich gach toradh:
outcomes = await asyncio.gather(*jobs, return_exceptions=True)
for (url, proxy), outcome in zip(routes, outcomes):
if isinstance(outcome, BaseException):
record_failure(url, proxy, outcome)
else:
record_success(url, proxy, outcome)
Tha coroutines iarrtasan na h-aplacaid ann an jobs; tha na paidhrichean (url, proxy) co-fhreagarrach ann an routes san aon òrdugh. 'S e gnìomhan clàraidh làimhseachadh thoraidhean na h-aplacaid fhèin. Glèidhidh gather òrdugh an inntrigidh eadhon nuair a tha òrdugh a' chrìochnaich eadar-dhealaichte.
Seòrsaich CancelledError a thilleas bho ghnìomh leanaibh mar chur-à-bhith seach a bhith a' cur a' choire air a phroxy. Bidh cur-à-bhith an gather a-muigh fhathast a' sgaoileadh gu clann nach eil deiseil; chan eil return_exceptions a' tionndadh a' chur-à-bhith sin gu soirbheachadh àbhaisteach.
Buineas làimhseachadh inbhe HTTP do bhroinn na h-obrach iarrtais cuideachd. Chan eil aiohttp a' togail eisgeul airson a h-uile mearachd HTTP gu bunaiteach, mar sin till an inbhe no cuir raise_for_status an sàs a rèir poileasaidh a' ghnìomh.
Nuair a tha na toraidhean ri fhaicinn, 's urrainn don aplacaid fàilligidhean ceangail a dhealachadh bho fhreagairtean a' chinn-uidhe agus co-dhùnadh dè an obair a tha airidh air oidhirp eile.