Что такое корутины в Python? 😮🐍

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

Вот пример простой корутины:


  def coroutine():
      x = 1
      while True:
          yield x
          x += 1

  cor = coroutine()
  print(next(cor))  # Выводит: 1
  print(next(cor))  # Выводит: 2
  print(next(cor))  # Выводит: 3
  

Здесь функция "coroutine" является корутиной, поскольку использует ключевое слово "yield" для приостановки выполнения и передачи значения обратно при вызове "next(cor)". Последующие вызовы "next(cor)" возобновляют выполнение, и корутина продолжает с того места, где она остановилась.

Детальный ответ

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

Корутины (coroutines) - это мощный инструмент, представленный в Python, который позволяет нам писать асинхронный код с помощью итеративного стиля программирования. Введены в Python 3.5, корутины позволяют нам сделать наш код более эффективным и быстрым в обработке асинхронных событий.

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

Создание корутин в Python

Для создания корутины в Python мы можем использовать ключевое слово async перед объявлением функции. Вот пример:


async def my_coroutine():
    # Код корутины
    

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

Запуск и управление корутинами

Для управления корутинами в Python используется цикл событий (event loop), который выполняет и переключает между корутинами. Вот пример использования цикла событий для запуска корутины:


import asyncio

async def main():
    # Создаем экземпляр цикла событий
    event_loop = asyncio.get_event_loop()
    
    # Запускаем корутину
    await event_loop.create_task(my_coroutine())
    
    # Запуск цикла событий
    event_loop.run_forever()
    
    # Завершение цикла событий
    event_loop.close()
    

Пример использования корутин

Давайте взглянем на пример использования корутин для параллельной обработки нескольких задач. Представим, что у нас есть список URL-адресов, и нам нужно выполнить HTTP-запрос для каждого из них асинхронно:


import asyncio
import aiohttp

async def fetch_url(url):
    async with aiohttp.ClientSession() as session:
        async with session.get(url) as response:
            return await response.text()

async def main():
    urls = [
        "https://example.com",
        "https://google.com",
        "https://github.com"
    ]
    
    tasks = []
    
    for url in urls:
        task = asyncio.create_task(fetch_url(url))
        tasks.append(task)
        
    # Ожидание завершения всех задач
    responses = await asyncio.gather(*tasks)
    
    for response in responses:
        print(response[:100])  # Выводим первые 100 символов каждого ответа

# Запуск программы
if __name__ == "__main__":
    asyncio.run(main())
    

В этом примере мы используем библиотеку aiohttp для выполнения асинхронных HTTP-запросов к разным URL-адресам. Мы создаем список задач, каждая из которых представляет собой асинхронный запрос к определенному URL-адресу. Затем мы ожидаем завершения всех задач с помощью функции asyncio.gather.

Заключение

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

Видео по теме

Основы асинхронности в Python #6: Корутины и yield from

Корутины для самых маленьких. Иван Гончарук, DAN

13. Асинхронный ввод/вывод. Корутины

Похожие статьи:

Что такое async python? 🐍🚀 Статья для начинающих о важности асинхронности в языке Python

🔧 Как перегрузить функцию python: легко и просто

🔒 Как создать хороший пароль без использования строки 1234566 на Python

Что такое корутины в Python? 😮🐍

🕰️ Как установить часовой пояс в datetime python: простой способ

Узнайте значение return в Python: объяснение и примеры использования

🔧 Как сделать завершение программы Python без проблем: пошаговое руководство