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,等等)。

请记住,celery 任务会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 回答