如何在API和工作者中使用不同的代码库来使用Celery

6

目前我有一个 Ec2 实例用于处理传入的 API 请求

  1. 用户订单通过 celery 任务进入 redis 队列
  2. 我有两个 Ec2 实例正在处理队列

问题在于,API 和 celery 工作节点上的代码基础相同。例如,我使用 cutsomer.process_order(order_id),然后工作节点完成其余操作。

有没有办法将 API 与工作节点代码分离?我想将 API 放在独立的代码库中,而将工作节点放在另一个独立的代码库中。

1个回答

17

您的 API 代码可以调用任何 Celery 任务,而无需可用任务源代码。Celery 有一个名为签名(signatures)的功能:

from celery import Celery
app = Celery(...)

process_order = app.signature('your-other-project.tasks.process_order')
result = process_order.delay(order_id)  # standard calling api works
print(result.get())

请确保您的 API 和 Worker 连接到同一个消息代理,并且您的 Worker 实际上有与签名中相同的任务名称。


谢谢。另外,工作进程是否也需要是 Django 应用程序,还是工作进程可以只是普通的 Python 模块,并且任务是普通的 Celery 任务? - Karl

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接