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 តាមគោលនយោបាយរបស់ភារកិច្ច។

នៅពេលលទ្ធផលអាចមើលឃើញ កម្មវិធីអាចបែងចែកការបរាជ័យនៃការតភ្ជាប់ពីការឆ្លើយតបរបស់គោលដៅ ហើយសម្រេចថាការងារណាគួរទទួលការព្យាយាមម្តងទៀត។

អត្ថបទពាក់ព័ន្ធ