Может ли celery-beats запускать только задачу celery или обычную задачу (Django)?

Я работаю над проектом django с celery и celery-beats. Мой основной сценарий использования - это использование celery-beats для установки периодической задачи в качестве фоновой задачи, вместо использования внешнего запроса для запуска. Я бы сохранил результаты и поместил их в модель, затем вытащил модель во внешнее представление как представление пользователю.

Моя текущая проблема заключается в том, что независимо от того, как я меняю способ вызова моей задачи, она всегда выбрасывает задачу, не зарегистрированную в списке задач внутри celery.

Я пытаюсь запустить задачу, не связанную с celery (внутри она будет вызывать задачу celery, используя модуль celery beats,

).

Ниже приведен pesudo-code.

tasks.py:

@app.shared_task
def longrunningtask():
   res = APIcall.delay()
   return res 

caller.py:

from .task import foo 

def dosomething(input_list):
  for ele in input_list: 
     res.append(longrunningtask())
  return res 

Периодическое задание :

schedule, created = CrontabSchedule.objects.get_or_create(hour = 1, minute = 34)
task = PeriodicTask.objects.create(crontab=schedule, name="XXX_task_", task='app.caller.dosomething'))
return HttpResponse("Done")

Ничего особенного в периодической задаче нет, но у меня это никогда не работает. Ошибка not detected tasks or not registered tasks если я не делаю dosomething() как задачу сельдерея.

Проблема в том, что я не хочу делать вызывающую функцию задачей celery, причина в том, что

  1. Внутри цикла for я бы сделал передачу параметров в task(), я бы хотел видеть несколько долго выполняющихся задач celery, которые выполняются с помощью цикла for, передавая их и пиная. Таким образом, я бы создал несколько подзадач, а не одну гигантскую выполняющуюся задачу.
  2. Нет необходимости, так как longrunningtask - это задача, которую я должен запускать как задачу celery, не нужно, чтобы ее родитель был внутри задачи celery.

Может кто-нибудь помочь мне выбраться из этой дилеммы? Это очень расстраивает и блокирует меня уже неделю.

Любые предложения или идеи по поводу этого варианта использования также будут очень полезны!

Вернуться на верх