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

Kar*_*arl 2 python django amazon-ec2 redis celery

Currenty我有一个Ec2实例来处理API请求

  1. 用户命令通过芹菜任务进入redis队列
  2. 我有2个Ec2实例处理队列

问题是API和芹菜工作者的代码库是相同的.因为e,g

我用 cutsomer.process_order(order_id)

然后工人完成其余的工作.

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

tuo*_*mur 7

您的API代码可以调用任何Celery任务,而无需使用任务源代码.Celery有一个称为签名的功能:

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())
Run Code Online (Sandbox Code Playgroud)

只需确保您的API和工作者连接到同一个消息代理,并且您的工作人员实际上具有签名中指定的任务.