ដោះស្រាយសំណើប្រូកស៊ីដែលបរាជ័យដោយ asyncio.gather
ពិនិត្យមើលករណីលើកលែងដែល asyncio.gather ត្រឡប់មកវិញ ហើយរក្សាលទ្ធផលនីមួយៗឱ្យភ្ជាប់នឹងប្រូកស៊ីដែលបានជ្រើសរើស។
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 តាមគោលនយោបាយរបស់ភារកិច្ច។
នៅពេលលទ្ធផលអាចមើលឃើញ កម្មវិធីអាចបែងចែកការបរាជ័យនៃការតភ្ជាប់ពីការឆ្លើយតបរបស់គោលដៅ ហើយសម្រេចថាការងារណាគួរទទួលការព្យាយាមម្តងទៀត។