我如何在 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的主要内容,如果未能解决你的问题,请参考以下文章

具有共享库的多个项目/解决方案的源代码控制

如何在同一个 Angular JS 应用程序中使用具有不同身份验证标头的不同 API

在纱线工作区中,如何强制解决子项目的依赖关系?

如何从具有不同参数的单个端点获得多个响应?

库如何实现不同操作系统之间的可移植性

提交多个具有相同代码库的 iOS 应用