如何使用Python Celery在不同服务器上执行任务?

Par*_*eog 7 python celery

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

从 celery文档中,我看到有一个task.py文件作为 celery 工作人员运行

from celery import Celery

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

@app.task
def add(x, y):
    return x + y
Run Code Online (Sandbox Code Playgroud)

然后我们有另一个 python 文件(假设client.py)调用这些任务。

from tasks import add

add.delay(4, 4)
Run Code Online (Sandbox Code Playgroud)

在这里我可以看到该client.py文件依赖于该tasks.py文件,因为它是tasktasks.py文件导入的。如果我们要在单独的服务器中运行这两个文件,我们需要将它们解耦并以某种方式调用任务,而无需导入代码。我不知道如何实现这一目标。那么,如何才能做到呢?

Dej*_*kic 8

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

  • 我能够使用以下格式“celery.send_task('tasks.add', (2, 2))”调用该任务,而无需将任务模块导入客户端代码。谢谢。 (4认同)