В Celery, как мне запустить задачу, а затем заставить эту задачу выполнить другую задачу и поддерживать ее работу? - PullRequest
2 голосов
/ 29 декабря 2010
#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 ]

6 голосов
/ 29 декабря 2010

Вы можете позвонить other_task.delay() изнутри Randomer.run;в этом случае вы можете установить Randomer.ignore_result = Trueother_task.ignore_result, и т. д.).

Помните, что задания сельдерея delay возвращаются мгновенно, поэтому, если вы не установили лимит или время ожиданияна вложенных вызовах (или рекурсивных вызовах) вы можете довольно быстро достичь расплавления.

Вместо рекурсивных или вложенных задач вы должны рассмотреть бесконечный цикл, чтобы избежать переполнения стека (без каламбура).

from celery.task import Task
class Randomer(Task):
    def run(self, **kwargs):
        while True:
           do_something(**kwargs)
           time.sleep(600)
2 голосов
/ 08 марта 2013

Вы можете объединить подзадачи, как описано здесь: http://docs.celeryproject.org/en/latest/userguide/canvas.html#chains

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...