在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 个回答
2
你可以像这里描述的那样,把子任务串联起来:http://docs.celeryproject.org/en/latest/userguide/canvas.html#chains
6
你可以在 Randomer.run
里面调用 other_task.delay()
;在这种情况下,你可能想把 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)