在Celery中,如何运行任务,然后让该任务运行另一个任务,并继续执行?

时间:2010-12-29 09:19:07

标签: python django data-structures asynchronous celery

#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()

现在,我执行简单的任务。它返回一个随机数。但是,如何让它在另一项任务中运行

2 个答案:

答案 0 :(得分: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)

答案 1 :(得分:2)

您可以按照此处所述链接子任务:http://docs.celeryproject.org/en/latest/userguide/canvas.html#chains