簡體   English   中英

通過Celery連接兩個單獨的項目

[英]Connect two separate project through Celery

我有一個項目“ A” (Django),我想在其中生成要發送給Celery經紀人的消息,例如Redis

在另一個項目“ B” (同一台計算機上的純python)上,我想啟動一個Celery服務器工作程序,以監視代理中的消息並執行任務。 任務在B中定義。

任務完成后,它們會將結果保存在redis中(也用作結果后端)。

准備好響應后,我希望django知道。

這可能嗎?
我主要擔心的是A不應從B導入任務,因此我應該使用send_task('task_name')

在實踐中,我應該創建2個獨立的celery實例,但僅運行服務器工作程序?

  • 實例1僅發送消息並讀取結果
  • 實例2注冊將要執行的任務。 任務最終將結果發送到后端

這種架構正確嗎?或者我缺少什么?

  1. 這可能嗎?

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

    准備好響應后,我希望django知道。

    芹菜響應存儲在redis中,並且django不會單獨通知。 您應該使用AsyncResult輪詢結果,以了解任務是否完成以及結果如何。

  2. 實際上,您可以運行任意數量的芹菜工人。 celery的目的是允許您在所需的服務器和進程之間分配工作負載。 對於您的體系結構,是的,您只需要運行(最少)一名芹菜工人。

    在生產者(django)中,使用以下代碼段實例化與Celery代理的連接:

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

    在您的消費者(芹菜)中,按照芹菜文檔中的建議定義芹菜實例。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM