В 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?
  • Полнотекстовый поиск: Whoosh Vs SOLR
  • В Django / python, как установить memcache в бесконечное время?
  • Получение «str» не имеет свойства «_default_manager» в приложении Django только при запуске
  • Автозаполнение ForeignKey (Пользователь) с текущим подписанным пользователем в Django
  • Добавить пользовательский html между двумя полями модели в Django admin's change_form
  • Django: timezone.now vs timezone.now ()
  • Django: как получить доступ к оригинальному (немодифицированному) экземпляру в сигнале post_save
  • Python - лучший язык программирования в мире.