В 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 Solutions collect form web for “В Celery, как мне запустить задачу, а затем запустить эту задачу для другой задачи и сохранить ее?”

Вы можете вызвать 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) 

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

  • Пакеты настройки неполадок для компиляции из Django-Assets / Webassets
  • Передавать дополнительные параметры для сигнала post_save
  • Имя динамической переменной в python
  • Почему я не могу сохранить объект в Django?
  • Django DecimalField генерирует «результат квантования имеет слишком много цифр для текущего контекста» ошибка при сохранении
  • Django на IronPython
  • Как вернуть 401 Unauthorized в Django?
  • python формат datetime с "st", "nd", "rd", "th" (английский порядковый суффикс), как PHP "S"
  • Python - лучший язык программирования в мире.