【问题标题】:How to execute tasks in different server using Python Celery?如何使用 Python Celery 在不同的服务器上执行任务?
【发布时间】:2020-04-22 09:28:46
【问题描述】:

假设我有三台服务器 A、B 和 C。服务器 C 将有 celery 任务代码,我需要从服务器 A 和 B 执行它们。

从 celery documentation,我看到有一个 task.py 文件作为 celery worker 运行

from celery import Celery

app = Celery('tasks', broker='pyamqp://guest@localhost//')

@app.task
def add(x, y):
    return x + y

然后我们有另一个调用这些任务的 python 文件(比如说client.py)。

from tasks import add

add.delay(4, 4)

在这里我可以看到client.py 文件依赖于tasks.py 文件,因为它正在从tasks.py 文件中导入task。如果我们要在不同的服务器上运行这两个文件,我们需要将它们解耦并以某种方式调用任务而无需导入代码。我无法弄清楚如何实现这一目标。那么,如何实现呢?

【问题讨论】:

    标签: python celery


    【解决方案1】:

    一般来说你不会那样做。您将相同的代码(包含任务)部署到生产者(客户端)和消费者(工作人员)。但是,Celery 是一款很酷的软件,它允许您实际安排任务,而无需在生产者端分发代码。为此,您必须使用send_task() 方法。您必须为生产者配置与您的工作人员相同的参数(自然是相同的代理,相同的序列化),并且您必须知道调用任务名称及其参数才能正确安排其执行。

    【讨论】:

    • 我能够使用以下格式 celery.send_task('tasks.add', (2, 2)) 调用任务,而无需将任务模块导入客户端代码。谢谢。
    猜你喜欢
    • 2023-03-13
    • 2019-11-21
    • 2020-07-01
    • 2014-06-21
    • 2014-08-30
    • 1970-01-01
    • 2014-10-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多