【问题标题】:Connect two separate project through Celery通过 Celery 连接两个独立的项目
【发布时间】:2019-06-05 21:14:24
【问题描述】:

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

在另一个项目“B”(同一台机器上的普通python)我想启动一个芹菜服务器工作者来监控代理中的消息并执行任务。任务在 B 中定义。

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

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

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

实际上我应该创建 2 个单独的 celery 实例但只运行一个服务器工作者?

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

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

【问题讨论】:

    标签: python redis celery django-celery


    【解决方案1】:
    1. 这可能吗?

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

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

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

    2. 实际上,您可以根据需要运行任意数量的 celery 工人。 celery 的目的是让你分配你的工作量 跨尽可能多的服务器和进程。为您 架构,是的,你只需要运行(至少)一个芹菜 工人。

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-05-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多