gpt4 book ai didi

python - 通过 Celery 连接两个独立的项目

转载 作者:可可西里 更新时间:2023-11-01 11:23:58 25 4
gpt4 key购买 nike

我有一个项目 “A” (Django),我想在其中生成要发送给 Celery 代理的消息,例如 Redis

在另一个项目“B”(同一台机器上的纯 python)中,我想启动一个 Celery 服务器 worker 来监视代理中的消息并执行任务。任务在 B 中定义。

当任务完成时,它们会将结果保存在 redis 中(也用作结果后端)。

当响应准备好时,我希望 django 知道。

这可能吗?
我主要担心的是 A 不应该从 B 导入任务,所以我应该使用类似 send_task('task_name') 的东西。

在实践中,我应该创建 2 个单独的 celery 实例,但只运行一个 server worker?

  • 实例1只发送消息和读取结果
  • 实例 2 注册将要执行的任务。任务最终将结果发送到后端

这个架构是正确的还是我遗漏了什么?

最佳答案

  1. 这可能吗?

    您所要求的一切都是可能的,除了:

    When the responses are ready I want django to be aware.

    Celery 响应存储在redis 中,而django 不会另行通知。您应该对结果进行投票使用 AsyncResult 查看任务是否完成结果是什么。

  2. 在实践中,您可以根据需要运行任意数量的 celery worker。celery 的目的是让你分配你的工作量跨越任意数量的服务器和进程。为您架构,是的,你只需要运行(至少)一个 celery worker 。

    在您的生产者 (django) 中,您实例化与使用以下代码段的 Celery 代理:

    from celery.app import Celery
    app = Celery(broker_url='redis://....')
    app.send_task(...)

    在您的消费者 (celery) 中,按照推荐定义 Celery 实例在 celery 文档中。

关于python - 通过 Celery 连接两个独立的项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54138207/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com