【问题标题】:How to send Celery task from one machine to another?如何将 Celery 任务从一台机器发送到另一台机器?
【发布时间】:2019-05-19 03:38:42
【问题描述】:

我正在尝试借助“任务名称”将任务从机器 A 上的芹菜工人发送到机器 B 上的芹菜工人。

所有任务都在机器 B 上定义,只有一个任务在机器 A 上。我想将 task_name 传递给机器 A 工作人员,并在机器 B 上执行具有相同 task_name 的任务。

如何相互交流。

我们是否在两个工作人员中保留相同的 broker_url 还是什么?

我使用 Redis 作为 Broker url 和结果后端。

【问题讨论】:

    标签: python redis celery


    【解决方案1】:

    (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 队列,您也可以使用一个代理执行此操作。

    【讨论】:

    • 感谢您的快速回复。我会尽快尝试。
    • 所以我使用了第二种方法,broker_url 在两台机器上和不同的队列上都相同。当我从机器 A 使用 send_task 时,它没有反映在机器 B 上,但是当我在机器 B 上创建一个与机器 B 同名的新任务时,它在机器 A 上反映了。此外,在启动工作人员时,它显示 ..Info]混合:寻找邻居..Info] 混合:独自一人。它不应该表明有另一个工作人员使用相同的 broker_url 运行吗?
    • 第一种方法,我使用两个不同的数据库,托管在不同的地方,似乎无法了解它应该如何使用。如果您可以提供帮助或向我推荐一个好的资源来查看?
    • 当我使用 AMQP 而不是 Redis 时,第二种方法效果很好。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-10-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多