3
#tasks.py
from celery.task import Task
class Randomer(Task):
    def run(self, **kwargs):
        #run Randomer again!!!
        return random.randrange(0,1000000)


>>> from tasks import Randomer
>>> r = Randomer()
>>> r.delay()

今、私は簡単なタスクを実行します。そして、乱数を返します。しかし、そのタスク内で別のタスクを実行させるにはどうすればよいですか?

4

2 に答える 2

6

other_task.delay()あなたは内側から呼び出すことができますRandomer.run; この場合、 Randomer.ignore_result = True(およびなど)を設定することをお勧めしますother_task.ignore_result

セロリタスクdelayは即座に返されるため、ネストされた呼び出し(または再帰呼び出し)に制限や待機時間を設定しない場合は、メルトダウンにすぐに到達できます。

再帰タスクやネストされたタスクの代わりに、スタックオーバーフローを回避するために無限ループを検討する必要があります(しゃれは意図されていません)。

from celery.task import Task
class Randomer(Task):
    def run(self, **kwargs):
        while True:
           do_something(**kwargs)
           time.sleep(600)
于 2010-12-29T11:04:05.743 に答える
2

ここで説明されているように、サブタスクをチェーンできます:http: //docs.celeryproject.org/en/latest/userguide/canvas.html#chains

于 2013-03-07T21:55:41.780 に答える