【发布时间】:2019-05-19 03:38:42
【问题描述】:
我正在尝试借助“任务名称”将任务从机器 A 上的芹菜工人发送到机器 B 上的芹菜工人。
所有任务都在机器 B 上定义,只有一个任务在机器 A 上。我想将 task_name 传递给机器 A 工作人员,并在机器 B 上执行具有相同 task_name 的任务。
如何相互交流。
我们是否在两个工作人员中保留相同的 broker_url 还是什么?
我使用 Redis 作为 Broker url 和结果后端。
【问题讨论】:
我正在尝试借助“任务名称”将任务从机器 A 上的芹菜工人发送到机器 B 上的芹菜工人。
所有任务都在机器 B 上定义,只有一个任务在机器 A 上。我想将 task_name 传递给机器 A 工作人员,并在机器 B 上执行具有相同 task_name 的任务。
如何相互交流。
我们是否在两个工作人员中保留相同的 broker_url 还是什么?
我使用 Redis 作为 Broker url 和结果后端。
【问题讨论】:
(1) 您可以为机器 A 和机器 B 使用单独的代理来执行此操作。默认情况下,redis 通常为您提供 16 个数据库,编号为 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) 如果您使用单独的 celery 队列,您也可以使用一个代理执行此操作。
【讨论】: