Об’єкти співпрограми
Оновлено: 28.04.2023
Об’єкти співпрограми є awaitable об’єктами. Виконання співпрограми можна контролювати викликом __await__() і повторенням результату. Коли співпрограма завершує виконання та повертається, ітератор викликає StopIteration, а атрибут винятку value зберігає значення, що повертається. Якщо співпрограма викликає виключення, воно поширюється ітератором. Співпрограми не повинні безпосередньо викликати необроблені винятки StopIteration.
Співпрограми також мають наведені нижче методи, аналогічні генераторам (див. Методи генератор-ітератор). Однак, на відміну від генераторів, співпрограми безпосередньо не підтримують ітерацію.
coroutine.send(value) Починає або відновлює виконання співпрограми. Якщо value дорівнює None, це еквівалентно просуванню ітератора, який повертає __await__(). Якщо value не є None, цей метод делегує метод send() ітератора, який викликав призупинення співпрограми. Результат (повернене значення, StopIteration або інший виняток) такий самий, як і під час ітерації по поверненому значенню __await__(), описаному вище.
coroutine.throw(value) coroutine.throw(type[, value[, traceback]]) Викликає вказаний виняток у співпрограмі. Цей метод делегує метод throw() ітератора, який викликав призупинення співпрограми, якщо він має такий метод. В іншому випадку виняток виникає в точці призупинення. Результат (повернене значення, StopIteration або інший виняток) такий самий, як і під час ітерації по поверненому значенню __await__(), описаному вище. Якщо виняток не перехоплюється співпрограмою, він поширюється назад до абонента.
coroutine.close() Примушує співпрограму самоочиститися та завершити роботу. Якщо співпрограму призупинено, цей метод спочатку делегує метод close() ітератора, який викликав призупинення співпрограми, якщо він має такий метод. Потім він викликає GeneratorExit у точці призупинення, змушуючи співпрограму негайно очищатися. Нарешті, співпрограма позначається як завершена, навіть якщо вона ніколи не запускалася. Об’єкти співпрограми автоматично закриваються за допомогою описаного вище процесу, коли їх збираються знищити.