我如何在 API 和工作人员中使用具有不同代码库的 celery
Posted
技术标签:
【中文标题】我如何在 API 和工作人员中使用具有不同代码库的 celery【英文标题】:How can i use celery with different code base in API and workers 【发布时间】:2016-08-26 18:06:06 【问题描述】:目前我有一个 Ec2 实例用于传入 API 请求
-
用户订单通过 celery 任务进入 redis 队列
我有 2 个 Ec2 实例处理队列
问题在于 API 和 celery worker 的代码库是相同的。因为例如,g
我用cutsomer.process_order(order_id)
然后工人完成其余的工作。
有什么方法可以将 API 与工作代码分开。我想在单独的代码库中制作 API,在单独的代码库中制作工人
【问题讨论】:
【参考方案1】:您的 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 和工作线程都连接到同一个消息代理,并且您的工作线程实际上具有签名中指定的任务。
【讨论】:
谢谢。工作人员也需要是 djangon 应用程序,还是工作人员可以只是普通的 python 模块和任务正常的 celery 任务?以上是关于我如何在 API 和工作人员中使用具有不同代码库的 celery的主要内容,如果未能解决你的问题,请参考以下文章