通过Celery连接两个单独的项目

时间:2019-01-10 23:06:17

标签: python redis celery django-celery

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

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

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

准备好回复后,我希望django知道。

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

在实践中,我应该创建2个独立的celery实例,但仅运行服务器工作程序?

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

此体系结构正确还是我缺少什么?

1 个答案:

答案 0 :(得分:0)

  1. 这可能吗?

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

      

    准备好回复后,我希望django知道。

    Celery响应存储在Redis中,而django不会 另行通知。您应该轮询结果 使用AsyncResult来确定任务是否完成以及 结果是什么。

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

    在生产者(django)中,您实例化与 芹菜经纪人使用以下代码段:

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

    在您的消费者(芹菜)中按建议定义Celery实例 在芹菜文档中。