簡體   English   中英

rq入隊函數:失敗,出現TypeError:function_xxx()接受2個位置參數,但給出了3個

[英]rq enqueue function: fails with TypeError:function_xxx() takes 2 positional arguments but 3 were given

這使我困擾了過去幾個小時,我似乎還找不到解決方案。

我正在使用django-rq來排隊一些長期運行的任務。 在我的tasks.py ,我具有以下內容:

from django_rq import job
@job
def long_running_task(hash, url, file_path):

     #doing some work

在我的views.py

def post(self, request, hash, file_path, format=None):
    URL = "http://127.0.0.1:9000/work/"
    task = django_rq.enqueue(long_running_task, hash, URL, file_path)
    print("job result is: ", task.result)
    return JsonResponse({"task_result": task.result})

但是,當我運行它時,它失敗並顯示以下消息:

TypeError: long_running_task() takes 2 positional arguments but 3 were given

顯然,我在這里做一些愚蠢的事情,但是我還無法弄清楚。 有人可以讓我知道這是怎么回事嗎?

卸下裝飾器會怎樣?

在AFAIU中,入隊僅接受一個函數及其args並返回作業。 裝飾器將函數聲明為作業。 您需要使用其中一個。

要使用w /裝飾器,您需要執行以下偽指令:

def post(self, request, hash, file_path, format=None):
    URL = "http://127.0.0.1:9000/work/"
    task = long_running_task.delay(hash, URL, file_path)
    # wait some time for completion
    print("job result is: ", task.result)
    return JsonResponse({"task_result": task.result})

奇怪的是,這似乎是一個循環依賴類型的問題。 以前,我在views.py文件中上一層了tasks.py文件(在其中定義了long_running_task )。 我將tasks.py文件移到了同一級別,並且開始正常工作。 盡管不知道為什么拋出了看似無關的錯誤。

暫無
暫無

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

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