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

TIM*_*MEX 2 python django asynchronous celery data-structures

#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()
Run Code Online (Sandbox Code Playgroud)

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

Pau*_*ine 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)
Run Code Online (Sandbox Code Playgroud)