Как отправить задачу Celery с одной машины на другую?

Я пытаюсь отправить задачу от работника сельдерея на машине A работнику сельдерея на машине B с помощью «имени задачи».

Все задачи определены на машине B, и только одна задача находится на машине A. Я хотел бы передать имя_задачи работнику машины A и выполнить задачу с тем же именем task_name на машине B.

Как мне общаться друг с другом.

Мы сохраняем один и тот же broker_url в обоих воркерах или как?

Я использую Redis в качестве URL-адреса брокера и бэкэнда результата.

Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
2
0
1 097
1

Ответы 1

(1) вы можете сделать это с отдельными брокерами для машины A и машины B. redis по умолчанию обычно дает вам шестнадцать баз данных, пронумерованных от 0 до 15. Таким образом, вы можете очень легко назначить db 0 для использования брокером для A и назначить db 1 для брокера для B. Затем для отправки задачи от B к A вы можете использовать send_task:

from celery import Celery
app = Celery('redis://myredis-server:6379/0')
app.send_task('task_name', kwargs = { 'param1': 'value1' })

(2) вы также можете сделать это с одним брокером, если используете отдельные очереди сельдерея.

Спасибо за быстрый ответ. Я попробую то же самое как можно скорее.

yugantar 18.12.2018 19:11

Итак, я использовал второй метод с одинаковым broker_url на обеих машинах и в разных очередях. Когда я использовал send_task с машины A, это не отразилось на машине B, но это отразилось на машине A, когда я создал новую задачу с тем же именем, что и на машине B. Кроме того, при запуске рабочих отображается ..Info] mingle: ищет соседей ..Info] mingle: в одиночку. Разве это не должно показывать, что есть другой воркер, работающий с тем же самым broker_url?

yugantar 19.12.2018 07:22

И первый метод, я использую две разные базы данных, размещенные в разных местах, и не могу понять, как именно они должны использоваться. Если вы можете помочь с этим или порекомендуете мне хороший источник, чтобы посмотреть?

yugantar 19.12.2018 07:40

Второй метод сработал как шарм, когда я использовал AMQP вместо Redis.

yugantar 19.12.2018 09:18

Другие вопросы по теме