Встречается на собеседованиях • сегодня
Можно ли совмещать потоки и асинхронность
Да, можно, но с осторожностью. В Python потоки (threading) и асинхронность (asyncio) работают на разных уровнях абстракции. Основные моменты:
-
asyncio в потоке: Запуск asyncio цикла в отдельном потоке возможен через
asyncio.run_coroutine_threadsafe()илиloop.call_soon_threadsafe(). -
Потоки в asyncio: Для вызова блокирующего кода из асинхронного контекста используйте
loop.run_in_executor()с ThreadPoolExecutor.
Пример:
python
import asyncio
from concurrent.futures import ThreadPoolExecutor
async def async_task():
print("Async task")
def blocking_task():
print("Blocking task")
async def main():
loop = asyncio.get_running_loop()
# Запуск асинхронной задачи
asyncio.create_task(async_task())
# Запуск блокирующей задачи в потоке
await loop.run_in_executor(ThreadPoolExecutor(), blocking_task)
asyncio.run(main())Важно помнить:
- Глобальная блокировка интерпретатора (GIL) ограничивает преимущества потоков для CPU-bound задач
- Смешивание требует аккуратной синхронизации
- Предпочтительнее использовать чистый asyncio для IO-bound задач

Софи собрала все вопросы. Тренируйся и получай
офферы быстрее!
офферы быстрее!
Попробовать бесплатно
Следующий вопрос
Это единственный вопрос по вашему фильтру
как отвечать на вопрос
пример собеседования
фреймворки на собеседовании
типичные вопросы junior
интервью вопросы и ответы