Sobes.tech
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 и может обрабатывать другие задачи параллельно.