> В чем разница синхронности и асинхронности в Python (Python)
Уровень: senior · Роль: backend · Язык: Python · Категория: Технические вопросы
Компании: Стилсофт, TrueEngineering, IPChain, Фабрика решений, aiso.team, praktika.ai, Сбер, Т1, Sunlight, ARX, CyberBird, Медиа Майн
Стек: Python
> Пример ответа
Основное различие между синхронным и асинхронным кодом в Python - в том, как программа ожидает завершения операций ввода-вывода (сеть, диски, базы данных).
Синхронность (синхронный код):
Каждая операция выполняется последовательно. Пока одна задача не завершится, следующая не начнётся. Если происходит блокирующий вызов (например, requests.get() или time.sleep()), весь поток выполнения останавливается. Это просто и предсказуемо, но неэффективно при большом количестве ожиданий.
Пример:
PYTHONimport timeimport requestsdef fetch(url):response = requests.get(url)return response.textstart = time.time()data1 = fetch('https://example.com')data2 = fetch('https://example.org')print(time.time() - start) # ~2 секунды (если каждый запрос ~1 сек)
Асинхронность (асинхронный код):
Использует async/await и event loop (например, asyncio). Вместо блокировки потока программа переключается на другую задачу во время ожидания I/O. Это позволяет выполнять множество операций параллельно в одном потоке, не тратя ресурсы на ожидание.
Пример:
PYTHONimport asyncioimport aiohttpasync def fetch(session, url):async with session.get(url) as response:return await response.text()async def main():async with aiohttp.ClientSession() as session:tasks = [fetch(session, 'https://example.com'),fetch(session, 'https://example.org')]await asyncio.gather(*tasks)start = asyncio.get_event_loop().time()asyncio.run(main())print(asyncio.get_event_loop().time() - start) # ~1 секунда (запросы выполняются одновременно)
Ключевые различия:
- Блокировка: синхронный код блокирует поток, асинхронный - нет.
- Производительность: асинхронность эффективнее для I/O-bound задач (сеть, файлы), синхронность - для CPU-bound (вычисления).
- Сложность: синхронный код проще писать и отлаживать; асинхронный требует понимания event loop и
await. - Инструменты: синхронный -
requests,time.sleep; асинхронный -aiohttp,asyncio.sleep.
Вывод: выбирайте синхронность для простых скриптов или CPU-нагрузки, асинхронность - для высоконагруженных I/O-приложений (веб-серверы, парсеры, чат-боты).
> Похожие задачи по Python
Что такое Dependency Injection (DI)
В чем разница между select_related и prefetch_related в Django ORM?
Какие типы данных существуют в Python
Что такое декоратор в Python и для чего он используется?
> Похожие задачи по backend
Что такое Dependency Injection (DI)
В чем разница между select_related и prefetch_related в Django ORM?
Какие типы данных существуют в Python
Что такое декоратор в Python и для чего он используется?
> ГОТОВЫ К СЛЕДУЮЩЕМУ СОБЕСЕДОВАНИЮ?
Запустите тренировочную сессию с ИИ и получите детальную обратную связь, чтобы увереннее проходить реальные интервью