Назад к вопросам
Middle
82
questionbank

Что такое асинхронное программирование (async)?

Sobes Copilot

Получайте ответы в реальном времени

Ответ от нейросети

sobes.tech AI

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

Основные концепции:

  • Coroutines (Корутины): Специальные функции, которые могут приостанавливать свое выполнение и возобновлять его позже. Объявляются с помощью async def.
  • Event Loop (Цикл событий): Основной оркестратор, который управляет выполнением корутин, отслеживает события и переключается между задачами, когда одна из них ожидает.
  • await: Ключевое слово для приостановки выполнения корутины до завершения ожидаемой операции (например, вызов другой корутины или ожидание результата выполнения I/O).

Пример:

// Пример асинхронной функции
import asyncio

async def fetch_url(url):
    print(f"Начинаю загрузку: {url}")
    await asyncio.sleep(2) // Имитация долгой операции (например, сетевого запроса)
    print(f"Загрузка завершена: {url}")

async def main():
    # Создаем задачи из корутин
    task1 = asyncio.create_task(fetch_url("http://example.com/page1"))
    task2 = asyncio.create_task(fetch_url("http://example.com/page2"))

    # Ждем завершения обеих задач
    await task1
    await task2

// Запускаем цикл событий
if __name__ == "__main__":
    asyncio.run(main())

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

  • Повышение производительности: Особенно для I/O-bound задач (сетевые запросы, работа с файлами).
  • Лучшее использование ресурсов: Не создается множество потоков или процессов, что снижает накладные расходы.
  • Сохранение отзывчивости: Основной поток не блокируется, что важно для интерактивных приложений или серверов.

Асинхронное программирование хорошо подходит для:

  • Веб-серверов (например, с использованием asyncio или FastAPI).
  • Парсинга веб-сайтов.
  • Работы с базами данных.
  • Любых задач, связанных с ожиданием внешних ресурсов.