2017-08-25 7 views
1

これは過去数時間私を悩ませています。rqエンキュー関数:TypeErrorで失敗しました:function_xxx()は2つの位置引数をとりますが、3が与えられました

私はdjango-rqを使用して、長時間実行されているタスクをエンキューしています。私はそれを実行すると、しかし、それは明らかに、以下のmessage-

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

で失敗

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}) 

views.py

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

    #doing some work 

と、:私のtasks.pyでは、私は以下の持っています私はここで愚かなことをしていますが、私はまだそれを理解することができません。誰かが私にここで起こっていることを教えてもらえますか?

答えて

0

は奇妙なことに、これは問題の循環依存型のように見えました。以前はviews.pyファイルから1レベル上のtasks.pyファイル(long_running_taskを定義しました)がありました。 tasks.pyファイルを同じレベルに移動したところ、正常に動作し始めました。一見無関係なエラーがなぜ投げられていたのかについては考えられません。

0

デコレータを取り外すとどうなりますか?

AFAIU、enqueueは関数とその引数をとり、ジョブを返します。デコレータは、関数をジョブとして宣言します。あなたはどちらか一方を使う必要があります。

次の擬似のような何かをする必要がありますデコレータ/ 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}) 
+0

a)@jobデコレータを削除しても、同じエラーが表示されます。 b)私がデコレータを保ち、.delayを使うと、私はまだ同じエラーが発生します。 – Subzero

関連する問題