Back to questions
Junior — Middle
54
Можно ли вызывать синхронные операции внутри асинхронной функции без ошибок или блокировок?
Companies where asked
СБЕР Бизнес
Answer from AI
sobes.tech AI
Вызывать синхронные операции внутри асинхронной функции в Python можно, но это может привести к блокировкам и снижению производительности, особенно если синхронная операция занимает много времени.
Чтобы избежать блокировок, синхронные операции, которые могут долго выполняться (например, ввод-вывод, запросы к базе данных), обычно запускают в отдельном потоке или процессе с помощью run_in_executor из модуля asyncio:
import asyncio
import time
def blocking_io():
time.sleep(3) # симуляция долгой синхронной операции
return 'result'
async def main():
loop = asyncio.get_running_loop()
result = await loop.run_in_executor(None, blocking_io)
print(result)
asyncio.run(main())
Таким образом, асинхронная функция не блокирует event loop и может обрабатывать другие задачи параллельно.