Установка и вызов группы задач сельдерея с индивидуальным обратным отсчетом времени

Использование: 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()
  1. .s() был изменен на .signature
  2. Аргументы были разделены таким образом, что они больше не являются неоднозначными

Спасибо!

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