Установка и вызов группы задач сельдерея с индивидуальным обратным отсчетом времени
Использование: Django==2.2.24
, Python=3.6
, celery==4.3.0
Вот что я делаю в настоящее время:
from celery import group
the_group_of_tasks = group(
some_task.s(an_object.the_data_dict)
for an_object in AnObject.objects.all()
)
the_group_of_tasks.delay()
Что я хочу сделать:
Документация group
: celery docs link
.
Я хотел бы распределить the_group_of_tasks
отдельные some_task
вызовы по некоторому временному диапазону.
Лучше всего, если я смогу использовать функцию countdown
и распределить задачи на переменное количество секунд (например, час, 3600 секунд).
Распределение будет сделано на случайное целое число секунд между нулем и 3600, представьте, что его можно легко вычислить, когда у меня есть диапазон.
Я думаю, что я могу добавить аргумент countdown
с генератором случайных чисел в пределах моего диапазона так, что он будет "упакован" и готов к выполнению в group
с подготовкой индивидуального задания?
some_task.s(an_object.the_data_dict, countdown=some_generator_call)
Сработает ли это?
Если это поможет, я добавляю фрагменты кода для delay()
, apply_async()
и Task.s()
.
Спасибо!
Итак, проблема заключалась в том, что countdown
предполагался как аргумент задачи, в то время как он должен был быть аргументом вызова apply_async
/delay
.
Это решило проблему:
the_group_of_tasks = group(
some_task.signature((an_object.the_data_dict), countdown=10)
for an_object in AnObject.objects.all()
)
the_group_of_tasks.delay()
.s()
был изменен на.signature
- Аргументы были разделены таким образом, что они больше не являются неоднозначными
Спасибо!