Может ли 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, причина в том, что
- Внутри цикла for я бы сделал передачу параметров в task(), я бы хотел видеть несколько долго выполняющихся задач celery, которые выполняются с помощью цикла for, передавая их и пиная. Таким образом, я бы создал несколько подзадач, а не одну гигантскую выполняющуюся задачу.
- Нет необходимости, так как longrunningtask - это задача, которую я должен запускать как задачу celery, не нужно, чтобы ее родитель был внутри задачи celery.
Может кто-нибудь помочь мне выбраться из этой дилеммы? Это очень расстраивает и блокирует меня уже неделю.
Любые предложения или идеи по поводу этого варианта использования также будут очень полезны!