Я создаю службу Python с использованием asyncio и пытаюсь обеспечить полную асинхронность своего кода. Однако моя реальная рабочая нагрузка включает в себя задачи, требующие большой загрузки ЦП, такие как анализ больших файлов и преобразование данных, а также некоторые сторонние библиотеки, которые блокируют и не предоставляют асинхронные API.
Я знаю, что могу использовать цикл.run_in_executor или asyncio.to_thread для блокирующих операций, а также я мог бы использовать многопроцессорную обработку. Но как на практике опытные разработчики решают, какие части должны оставаться полностью асинхронными, какие должны использовать пул потоков и когда лучше изолировать работу в отдельный процесс или сервис?
Я ищу практические правила принятия решений и шаблоны, которые работают в рабочей среде, а не просто игрушечные примеры. Каковы компромиссы?
Подробнее здесь: https://stackoverflow.com/questions/798 ... to-make-ev