Обрада неуспешних proxy захтева помоћу asyncio.gather
Прегледајте изузетке које враћа asyncio.gather и задржите сваки исход повезан са изабраним proxyјем.
asyncio.gather са return_exceptions=True ставља изузетке задатака на своју листу резултата. Зато чекање на серију без изузетка не значи да је сваки proxy захтев успео.
Држите одредиште и изабрани proxy уз послате awaitable објекте, а затим прегледајте сваки исход:
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)
jobs садржи корутине захтева апликације; routes садржи њихове одговарајуће парове (url, proxy) истим редоследом. Функције за бележење представљају сопствену обраду резултата апликације. gather чува редослед улаза чак и када се редослед завршетка разликује.
Враћени CancelledError подређеног задатка класификујте као отказивање, уместо да кривите његов proxy. Отказивање спољашњег gather-а и даље се преноси на незавршену децу; return_exceptions не претвара то отказивање у обичан успех.
Обрада HTTP статуса такође припада унутар операције захтева. aiohttp подразумевано не подиже изузетак за сваку HTTP грешку, па вратите статус или примените raise_for_status у складу с политиком задатка.
Када исходи постану видљиви, апликација може разликовати мрежне кварове од одговора одредишта и одлучити који посао заслужује још један покушај.