Запуск периодической задачи 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
-
- Создайте динамическую периодическую задачу.:
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
)
Это создаст динамическую периодическую задачу, которую вы можете контролировать как по расписанию, так и в процессе создания.
-
- Запустите Celery так :
celery -A your_app_name beat -l INFO -S redbeat.RedBeatScheduler --max-interval 10