django-celery-beat и DatabaseScheduler с установленным временем первого запуска

Я хочу использовать django-celery-beat и DatabaseScheduler для создания функции «оповещения по электронной почте» для пользователей. Они должны иметь возможность указать, когда они хотят получать эти оповещения (например, каждый день в 7 утра или каждую неделю в понедельник в 13:00).

Я почти понял, как создавать периодические задачи, т.е.

>>> PeriodicTask.objects.create(
...     interval=schedule,                  # we created this above.
...     name='Importing contacts',          # simply describes this periodic task.
...     task='proj.tasks.import_contacts',  # name of task.
...     expires=datetime.utcnow() + timedelta(seconds=30)
... )

из https://github.com/celery/django-celery-beat, но как мне сказать, когда должна быть первая рассылка?


person Oliver Adria    schedule 23.02.2020    source источник


Ответы (1)


В модели PeriodicTask есть поле start_time. Вы можете установить для него значение даты и времени. Задание будет отправлено первым после этого времени.

>>> PeriodicTask.objects.create(
        # skipped
        start_time=datetime.utcnow() + timedelta(seconds=300)
        # task will be first sent after 5 minutes
)
person Nafees Anwar    schedule 23.02.2020
comment
Спасибо, это сработало! У меня была проблема с тем, что он не запускается по какой-то причине. Только когда я добавил last_run_at=job_alert.start_time - timedelta(days=1), (при условии, что интервал составляет один день), это наконец сработало. Не уверен, почему (см. github.com/celery/django-celery -бить/проблемы/) - person Oliver Adria; 24.02.2020