Ṣiṣakoso Awọn ìbéèrè proxy tí ó kùnà pẹ̀lú asyncio.gather
Ṣàyẹ̀wò àwọn ìyàtọ̀ tí asyncio.gather ń dá padà kí o sì jẹ́ kí àbájáde kọ̀ọ̀kan ní ìsopọ̀ pẹ̀lú proxy tí a yàn.
asyncio.gather pẹ̀lú return_exceptions=True ń fi àwọn ìyàtọ̀ iṣẹ́ sínú àkójọ àbájáde rẹ̀. Nítorí náà dídúró de ẹgbẹ́ náà láìsí ìyàtọ̀ kò túmọ̀ sí pé gbogbo ìbéèrè proxy ṣàṣeyọrí.
Fi ibi tí ó ń lọ àti proxy tí a yàn sí ẹ̀gbẹ́ àwọn awaitable tí a fi ránṣẹ́, lẹ́yìn náà ṣàyẹ̀wò àbájáde kọ̀ọ̀kan:
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 ní àwọn coroutine ìbéèrè ti ohun èlò náà; routes ní àwọn pẹ́árì (url, proxy) tí ó bá a mu ní ọ̀nà kan náà. Àwọn iṣẹ́ gbígbàlẹ̀ ni ìtọ́jú àbájáde ti ohun èlò náà fúnra rẹ̀. gather ń pa ọ̀nà ìwọlé mọ́ bí ó tilẹ̀ jẹ́ pé ọ̀nà ìparí yàtọ̀.
Pín CancelledError tí ó padà láti iṣẹ́ ọmọ gẹ́gẹ́ bí ìfagilé dípò kí o da proxy rẹ̀ lẹ́bi. Ìfagilé gather ìta ṣì ń tàn kálẹ̀ sí àwọn ọmọ tí kò tíì parí; return_exceptions kò yí ìfagilé yẹn padà sí àṣeyọrí déédéé.
Ìtọ́jú ipò HTTP pẹ̀lú wà nínú iṣẹ́ ìbéèrè náà. aiohttp kì í gbé ìyàtọ̀ jáde fún gbogbo àṣìṣe HTTP ní àìpé, nítorí náà dá ipò náà padà tàbí lo raise_for_status gẹ́gẹ́ bí ìlànà iṣẹ́ náà.
Ní kété tí àwọn àbájáde bá hàn, ohun èlò náà lè ya àwọn ìkùnà ìsopọ̀ sọ́tọ̀ kúrò nínú àwọn ìdáhùn ibi tí ó ń lọ, kí ó sì pinnu iṣẹ́ wo ni ó yẹ fún ìgbìyànjú mìíràn.