rq enqueue function: fails with TypeError:function_xxx() takes 2 positional arguments but 3 were given
rq enqueue function: fails with TypeError:function_xxx() takes 2 positional arguments but 3 were given
这困扰了我几个小时,我似乎还没有找到解决办法。
我正在使用 django-rq 对一些较长的 运行ning 任务进行排队。在我的 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,enqueue 只需要一个函数及其参数和 returns 一个作业。装饰器将函数声明为作业。您需要使用其中之一。
要使用装饰器,您需要执行以下伪操作:
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})
奇怪的是,这似乎是一种循环依赖类型的问题。以前,我的 tasks.py
文件(我在其中定义 long_running_task
)比我的 views.py
文件高一级。我将 tasks.py
文件移动到同一级别,它开始正常工作。不知道为什么会抛出看似无关的错误。
这困扰了我几个小时,我似乎还没有找到解决办法。
我正在使用 django-rq 对一些较长的 运行ning 任务进行排队。在我的 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,enqueue 只需要一个函数及其参数和 returns 一个作业。装饰器将函数声明为作业。您需要使用其中之一。
要使用装饰器,您需要执行以下伪操作:
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})
奇怪的是,这似乎是一种循环依赖类型的问题。以前,我的 tasks.py
文件(我在其中定义 long_running_task
)比我的 views.py
文件高一级。我将 tasks.py
文件移动到同一级别,它开始正常工作。不知道为什么会抛出看似无关的错误。