Вынесите блокирующий I/O-вызов в asyncio.to_thread или подходящий executor. Если работа преимущественно CPU-bound и не освобождает GIL, рассмотрите отдельный процесс.
Как обработать блокирующую функцию из старой библиотеки так, чтобы не блокировать event loop?
Вынесите блокирующий I/O-вызов в asyncio.to_thread или подходящий executor. Если работа преимущественно CPU-bound и не освобождает GIL, рассмотрите отдельный процесс.
Короткий ответ
Что ответить на собеседовании
Подробный разбор
Ответ с пояснениями
Вынесите блокирующий I/O-вызов в asyncio.to_thread или подходящий executor. Если работа преимущественно CPU-bound и не освобождает GIL, рассмотрите отдельный процесс.
result = await asyncio.to_thread(legacy_function, argument)
Проверьте потокобезопасность библиотеки и ограничьте число одновременных вызовов. Отмена coroutine не останавливает принудительно уже работающий поток; таймауты нужны и самой операции. Для API с thread-local состоянием может потребоваться выделенный executor или другая изоляция.