2016-09-22 57 views
0

說我有一個芹菜工人依賴的大模塊上,十調用芹菜任務需要所有工作人員的依賴關係?

由於任務定義需要對工人的應用程序DEF的引用(例如,@ app.task)這意味着我的「客戶」(代碼調度任務)也需要依賴於這個模塊。

這對我沒有意義 - 我得到這個錯誤? A)

A)。我不希望我的任務調用者擁有這些依賴關係(例如,它們可能位於不同的Docker容器中)。

B)。出於安全原因,我不希望我的任務調用者有權訪問此代碼。

有沒有辦法解決它?

感謝,

RB

回答

2

你的客戶端代碼可以遠程啓動任務,而無需導入任務的落實。你顯然必須配置客戶端連接到同一代理的工人,但一旦做到這一點,那麼你可以使用signatures調用任務:

import celery 
result = celery.signature("app.tasks.foo", args=(1,)).delay().get() 

的第一個參數celery.signature是任務的名稱。它通常是包含任務的模塊的絕對名稱(例如,上面代碼中的app.tasks)加上任務名稱(foo)。

+0

謝謝路易斯。這裏的問題,但: 在我的模塊worker.py,我定義了「應用程序」具有整個芹菜配置。但芹菜工人的「客戶」只需要運輸配置(例如,BROKER_URL)。然而,「客戶端」(調用者)也必須引用tasks.py,並且該模塊需要引用Celery應用程序實例。 爲什麼工人的實際工作人員和客戶端依賴於相同的應用程序實例?我知道他們都需要相同的傳輸配置,但沒有其他共同點? – rsb

+0

我想,我的問題是調用者需要哪些配置屬性(鑑於文檔假設兩者都使用相同的實例),在我的情況下,調用者和工作者位於不同的碼頭容器中。 – rsb