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 ကို အသုံးပြုပါ။

ရလဒ်များ မြင်ရသောအခါ အပလီကေးရှင်းသည် ချိတ်ဆက်မှု မအောင်မြင်မှုများကို ဦးတည်ရာ၏ တုံ့ပြန်မှုများနှင့် ခွဲခြားနိုင်ပြီး မည်သည့် အလုပ်က နောက်ထပ် ကြိုးစားမှု ထိုက်တန်သည်ကို ဆုံးဖြတ်နိုင်သည်။

ဆက်စပ်ဆောင်းပါးများ