asyncio.gather د return_exceptions=True سره د دندو استثناوې په خپل د نتایجو لیست کې ځای پرځای کوي. نو د یوې ډلې انتظار پرته له استثنا معنا دا نه ده چې هره پروکسي غوښتنه بریالۍ شوه.

منزل او ټاکل شوی پروکسي د لیږل شوو 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 د هغې پروکسي په تور نه لګولو سره د لغوه کیدو په توګه وګڼئ. د بهرني gather لغوه کیدل لا هم نیمګړو ماشومانو ته خپریږي؛ return_exceptions هغه لغوه کیدل په عادي بریا نه بدلوي.

د HTTP حالت سمبالول هم د غوښتنې عملیاتو دننه دي. aiohttp په ډیفالټ ډول د هر HTTP تېروتنې لپاره استثنا نه پورته کوي، نو حالت بیرته راکړئ یا د دندې د تګلارې له مخې raise_for_status پلي کړئ.

کله چې نتایج ښکاره شي، اپلیکیشن کولی شي د اړیکې ناکامي د منزل له ځوابونو څخه جلا کړي او پریکړه وکړي چې کوم کار د بل هڅې وړ دی.

اړوندې مقالې