JET School

Что такое Корутины?

Корутины — это специальные функции в Python, предназначенные для асинхронного программирования, которые могут быть приостановлены и возобновлены в дальнейшем. Они сохраняют своё внутреннее состояние между вызовами, позволяя программе выполнять другие задачи, пока корутина "ждёт" завершения какой-либо операции.

Корутины идеально подходят для неблокирующих задач, таких как сетевые запросы, работа с файлами или взаимодействие с базами данных, — то есть для всего, что требует ожидания, но при этом не должно "замораживать" выполнение всей программы.

Отличие от обычных функций:

  • Обычные функции завершаются после return.
  • Корутины могут "приостановиться" с помощью await, а затем продолжить выполнение.

Как определить корутину:

Корутины создаются с помощью ключевого слова async def и используют await для ожидания других асинхронных функций.


import asyncio

async def приветствие():

print("Привет")

await asyncio.sleep(2)

print("Через 2 секунды снова привет!")

Как запускать:

Нельзя просто вызвать функцию. Необходимо использовать await или asyncio.run():


asyncio.run(приветствие())

Преимущества корутин:

  • Позволяют выполнять асинхронные задачи без блокировки основного потока.
  • Повышают производительность при множестве операций ввода-вывода.
  • Используют меньше ресурсов по сравнению с потоками и процессами.

Полезно знать:

Чтобы эффективно использовать корутины, необходимо понимать:

  • async и await
  • Event loop (цикл событий)
  • Модуль asyncio

Пример с несколькими корутинами:


import asyncio

async def первая():

print("Первая началась")

await asyncio.sleep(1)

print("Первая завершена")


async def вторая():

print("Вторая началась")

await asyncio.sleep(1)

print("Вторая завершена")


async def main():

await asyncio.gather(первая(), вторая())


asyncio.run(main())

Здесь обе корутины выполняются параллельно, и программа завершается за 1 секунду, а не за 2.

Присоединяйтесь к нашим курсам для углубленного изучения области ИТ. Отправьте запрос для получения подробной информации!