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) のみがキューに追加され、処理されます。

「add.delay(1,9)」という行があるため、継続的にタスクが追加されているはずです。

注:別のタスクを実行するには、各タスクが必要です。

4

3 に答える 3

0

あなたはサブタスクとコールバックを見る必要があります、あなたが探している答えをあなたに与えるかもしれません

http://celeryproject.org/docs/userguide/tasksets.html

于 2011-04-16T18:35:25.963 に答える
0

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

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

于 2011-04-16T18:01:21.883 に答える
0

私が見る限り、periodic_task デコレーターは preiodic タスクを作成しており、 task はただ 1 つのタスクを作成します。そして delay はそれを非同期に実行するだけです。

再帰の代わりに、periodic_task を使用する必要があります。

于 2010-12-29T08:04:29.497 に答える