Как общаться между процессами? Здравствуйте!
Есть такая задача:
1. Клиент запускает обработку данных
2. Tornado принимает запрос от клиента и запускает тяжелый и долгий процесс.
Как правильно запустить этот процесс?
Сейчас все реализовано таким образом:
1. Тяжелый процесс вызывается через threads, туда параметром передается некий идентификатор
2. Далее делаются переодические запросы через js на другой url с передачей идентификатора
3. tornado делает запрос в бд, чтобы отследить прогресс (соответственно тот долгий процесс, что-то пишет в бд, используя переданный ранее идентификатор)
К сожалению, redis и тому подобное использовать нельзя.
Правильная ли такая архитектура? Может есть другие более канонические решения?

21 Авг 2019 в 06:29
298 +1
0
Ответы
1

Для общения между процессами в данном случае можно использовать механизм очередей сообщений. Вместо того чтобы делать периодические запросы через js на другой URL, вы можете использовать очередь сообщений, на которую тяжелый процесс будет писать прогресс выполнения. Tornado в свою очередь может подписаться на эту очередь и получать обновления о прогрессе.

Например, вы можете использовать библиотеку RabbitMQ для создания очереди сообщений. Tяжелый процесс будет писать сообщения о прогрессе в очередь, а Tornado будет считывать их и обновлять данные клиента через WebSocket или другой механизм.

Такое решение позволит вам избежать периодических запросов и сделает общение между процессами более эффективным и масштабируемым.

Однако, если использование Redis или других аналогичных инструментов запрещено, вам придется обойтись без них и использовать другие доступные вам средства для общения между процессами.

20 Апр 2024 в 13:17
Не можешь разобраться в этой теме?
Обратись за помощью к экспертам
Гарантированные бесплатные доработки в течение 1 года
Быстрое выполнение от 2 часов
Проверка работы на плагиат
Поможем написать учебную работу
Прямой эфир