假设我有三台服务器 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
文件,因为它正在导入 task
来自 tasks.py
文件。如果我们要在不同的服务器上运行这两个文件,我们需要将它们解耦并以某种方式调用任务,而无需导入代码。我无法弄清楚如何实现这一目标。那么,如何做到呢?
最佳答案
一般来说,你不会这样做。您将相同的代码(包含任务)部署到生产者(客户端)和消费者(工作人员)。但是,Celery 是一款很酷的软件,它允许您实际安排任务,而无需在生产者端分发代码。为此,您必须使用 send_task()方法。您必须为生产者配置与您的工作人员相同的参数(自然是相同的代理,相同的序列化),并且您必须知道调用任务名称及其参数才能正确安排其执行。
关于python - 如何使用 Python Celery 在不同的服务器上执行任务?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61361676/