Запуск периодической задачи celery с динамическим расписанием в приложении django

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

Итак, что-то вроде этого:

# celery.py

def get_schedule():
    config = get_user_config()  # returns a model object of sorts
    return config.frequency_in_seconds

app.conf.beat_schedule = {
    'my_periodic_task': {
        'task': 'my_periodic_task',
        'schedule': get_schedule,  # schedule updated based on `get_schedule` function
    },
}

Таким образом, если пользователь изменит поле frequency_in_seconds в настройках пользовательской конфигурации, это динамически обновит расписание ударов.

Моим предпочтением было бы сделать это вне сайта Django Admin и без каких-либо дополнительных пакетов (например, django-celery-beat).

Любые мысли или идеи будут высоко оценены.

Спасибо

Если вы используете django, вы можете использовать django-celery-beat, чтобы позволить конечным пользователям управлять расписанием с помощью панели администратора django.

Если вы используете redis в качестве бэкенда результатов, вы можете использовать эту библиотеку здесь https://github.com/parad0x96/django-redbeat

    1. Создайте динамическую периодическую задачу.:
from django_redbeat import PeriodicTaskEntry

task = PeriodicTasksEntry.objects.create(
       name="The verbose name of the task",
       task="yourapp.tasks.task_name",
       args=[arg1, arg2,],
       schedule=10# the schedule in seconds
)

Это создаст динамическую периодическую задачу, которую вы можете контролировать как по расписанию, так и в процессе создания.

    1. Запустите Celery так :

celery -A your_app_name beat -l INFO -S redbeat.RedBeatScheduler --max-interval 10

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