簡體   English   中英

無法從 Django 應用程序調用 Celery 任務(缺少位置參數)

[英]Celery task cannot be called (missing positional arguments) from Django app

好吧,我已經翻遍了所有 SO 帖子、Celery 文檔等……但我就是想不通。 無論我嘗試什么或如何嘗試從 Django 應用程序調用任務,Celery 都在抱怨我沒有提供所需的參數。

“類型錯誤:add() 缺少 2 個必需的位置參數:'x' 和 'y'”。

我正在從他們的文檔中遵循一個非常簡單的示例……僅使用延遲,例如:

add.delay(1, 2)

仍然是同樣的錯誤。 我也試過add.delay(x=1, y=2) , celery.send_task("add", [1, 2])和各種各樣的其他方式我見過在各種帖子中調用的任務,沒有他們工作。

方法非常簡單:

@shared_task
def add(x, y):
    return x + y

我也試過它的名字,例如:

@task(name="my_add")
def add(x, y):
    return x + y

結果一樣。 我還能缺少什么?

首先,您應該在與 Django 和 Celery 配置相關的帖子中添加更多信息。

但我認為您的錯誤在於 @task 裝飾器,因為您似乎需要使用Bound tasks

  • 任務被綁定意味着任務的第一個參數將始終是任務實例(self),就像 Python 綁定方法一樣。 參考
  • 另一方面,綁定參數意味着該函數將是一個“綁定方法”,以便您可以訪問任務類型實例上的屬性和方法。 參考

所以你的代碼應該是這樣的:

import celery

@task(bind=True, name="my_add")
def add(self, x, y):
    return x + y

請注意,任務裝飾器的綁定參數將提供對 self(任務類型實例)的訪問。

最后,我建議您再次查看 Django 上Celery 設置

暫無
暫無

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

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