如何在API和工作者中使用具有不同代码库的芹菜

时间:2016-05-02 03:29:59

标签: python django amazon-ec2 redis celery

Currenty我有一个Ec2实例用于输入API请求

  1. 用户订单通过芹菜任务
  2. 进入redis队列
  3. 我有两个处理队列的Ec2实例
  4. 问题是API和芹菜工作者的代码库是相同的。因为e,g

    我使用cutsomer.process_order(order_id)

    然后工人完成剩下的工作。

    有没有办法将API与工作代码分开。我想在单独的代码库中创建API,在单独的代码库中创建工作者

1 个答案:

答案 0 :(得分:6)

您的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和工作人员都连接到同一个消息代理,并且您的工作人员实际上已经签名中指定了该任务。