![](/img/trans.png)
[英]TypeError: function() takes 1 positional argument but 2 were given
[英]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.