2010-12-29 9 views
0
#tasks.py 
from celery.decorators import task 

@task() 
def add(x, y): 
    add.delay(1, 9) 
    return x + y 

>>> import tasks 
>>> res = tasks.add.delay(5, 2) 
>>> res.result() 
7 

このコードを実行すると、タスクがキューに継続的に追加されることが予想されます。しかし、そうではありません!最初のタスク(5,2)だけがキューに追加され、処理されます。私のPythonコードに何か問題がありますか? (関数)

を継続的原因この行に、追加されているタスクがあるはずです:「add.delay(1,9)」

注:私は別のタスクを実行するために、各タスクを必要としています。

+0

まず探している答えを与える可能性がある、サブタスクとコールバックを見なければならない、あなたは同じタスク、または別のタスクを実行するためのタスクがありますか? – Kaerber

+0

2番目に、なぜそれが必要ですか?理由はありますか、あるいはあなたは現在の物事にちょうど結びついていますか? – Kaerber

答えて

0

私が見ることができる限り、periodic_taskデコレータはプリオジックなタスクを作成しています。タスクはタスクを1つだけ作成します。そして、遅延はそれを非同期的に実行します。

再帰の代わりにperiodic_taskを使用するだけです。

+0

いいえ、別のタスクを実行するにはそれぞれのタスクが必要です。どうすればいい? – TIMEX

+0

それはどういう意味ですか? 'add.delay(1,9)'が何をすべきか、なぜそうするべきか正確に私たちのために記述できますか? – Falmarri

+0

私はadd.delay(1,9)と同じ関数 "add"を呼び出すと思います。それから、デコレータがあるので、それをタスクとして扱います。その場合、別のタスクが実行されます。タスクは引き続き作成され、終了することはありません。 – TIMEX

0

add機能体内は、装飾されたバージョンではなく、元の機能を参照します。

タスクを繰り返し実行する必要がある場合は、代わりに@periodic_taskを使用してください。遅延が毎回異なる場合にのみ、再帰が必要です。この場合、デコレータを使用する代わりにサブクラスTaskを使用すると、問題なく再帰を使用できるようになります。

関連する問題