【问题标题】:How can i use celery with different code base in API and workers我如何在 API 和工作人员中使用具有不同代码库的 celery
【发布时间】:2016-08-26 18:06:06
【问题描述】:

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

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

问题在于 API 和 celery worker 的代码库是相同的。因为例如,g

我用cutsomer.process_order(order_id)

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

有什么方法可以将 API 与工作代码分开。我想在单独的代码库中制作 API,在单独的代码库中制作工人

【问题讨论】:

    标签: python django amazon-ec2 redis celery


    【解决方案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 任务?
    猜你喜欢
    • 1970-01-01
    • 2021-09-11
    • 2021-08-15
    • 2020-01-28
    • 2019-05-29
    • 1970-01-01
    • 2014-08-26
    • 2021-09-08
    • 1970-01-01
    相关资源
    最近更新 更多