бэкенд для расчётного модуля.
Расчётный модуль - синхронный CPU-bound скрипт, написанный на Питоне, бэк хочется писать так же на Питоне. По ТЗ нужно гарантировать обработку до десяти запросов одновременно на машине с 10-тиядерным процессором (на каждый запрос до минуты времени обработки, время работы модуля гарантированно до минуты), на которой помимо бэка и расчётного модуля должна крутиться PostgreSQL.
Как в таком случае стоит организовать взаимодействие между бэком и расчётным модулем? Стоит ли делать бэк асинхронным? Как тогда вызывать скрипт - через loop.run_in_executor(...)? Или, может, стоит написать бэк на Flask и создавать отдельный процесс на расчёт?
run_in_exexutor не поможет на разных ядрах работать из-за GIL. Для решения твоей задачи нужно запускать несколько инстансов приложения
Тебе стоит воспользоваться Celery
Там и воркеров настроить можно, и очереди выставить приоритетные И прочее, прочее..
да, селери тут лучше всего будет
Через шину
Для Celery обязательно поднимать брокер сообщений типа RabbitMQ? Ни разу ни тем, ни тем не пользовался. Похоже, настало время. Celery поможет несколько инстансов приложения-бэка поднять, получается? Или "воркеры" в данном контексте означают что-то другое?
Подниматься придется либо его, либо Redis Celery позволяет делать "таски", которые могут быть запущены внутри процессов aka воркерах для выполнения В тч допустим распределено выполнять твои таски в разных серверах, в разных цодах
А для управления всем зоопарком не забудь про докер композ, только базу не пихай туда, вынеси на уровень тачки, или вообще удалённо
Как сказать.
В чём, по вашему мнению, могут быть подводные камни в таком подходе?
Ну накладные расходы скорее всего будут больше чем с пулом процессов
нет, celery умеет работать с разными брокерами сообщений. ты можешь взять и Redis если для твоей задачи его хватает
Обсуждают сегодня