Назад к вопросам
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). - Парсинга веб-сайтов.
- Работы с базами данных.
- Любых задач, связанных с ожиданием внешних ресурсов.