Як запустити кілька async завдань паралельно?
Запуск кількох асинхронних завдань паралельно є базовим патерном проєктування під час розробки ефективних веб-додатків і парсерів мовою Python. Коли програмі потрібно надіслати десяток незалежних мережевих запитів до різних API або завантажити безліч сторінок одночасно, послідовне виконання кожної операції призведе до невиправданого зростання часу роботи. Асинхронна модель дозволяє ініціювати всі ці процеси одночасно й дочікуватися їх завершення в єдиній точці програми.
Для реалізації паралельного виконання корутин у стандартній бібліотеці передбачено набір зручних інструментів.
Під час роботи з безліччю паралельних завдань вкрай важливо правильно обробляти можливі винятки. За замовчуванням функція gather припиняє роботу та підіймає виняток у разі падіння хоча б одного завдання. Щоб цього уникнути, можна передати параметр return_exceptions=true, після чого в результуючому списку замість винятків будуть повернуті об'єкти помилок, які можна обробити окремо для кожного запиту.
Також не варто забувати про захист від зависань за допомогою таймаутів. Обгортання виклику gather у конструкцію обмеження часу гарантує, що програма не чекатиме нескінченно на завислий сервер, а коректно перерве завислі операції та звільнить ресурси. Такий комплексний підхід забезпечує високу відмовоустойчивість і максимальну швидкість виконання асинхронного коду за будь-яких умов.