Как реализовать выполнение задач по расписанию? - PullRequest
0 голосов
/ 21 мая 2019

У меня есть django-проект с некоторыми задачами, которые сохраняются в БД. Мне нужно, чтобы задачи выполнялись в определенное время. Я думаю о cron или сельдерее, но я вижу только функцию, похожую на повторяющиеся действия, но мне нужно делать это вовремя, которое сохраняется в моей базе данных. Как я могу это сделать?

Ответы [ 2 ]

1 голос
/ 21 мая 2019

Я думаю, что вы ищете сельдерей beat_schedule.

app.conf.beat_schedule = {
    # Starts to run task on specific time.
    'your-task-name': {
        'task': 'your.tasks.path.name',
        'schedule': crontab(
            minute=[get it from database],
            hour=[get it from database]
        ),
    },
}

Вот документация из сельдерея: https://docs.celeryproject.org/en/latest/userguide/periodic-tasks.html

1 голос
/ 21 мая 2019

Каноническим решением было бы запускать cronjob каждые X минут, который ищет вашу базу данных для выполнения задач и запускает задачу celery для каждой (так что выполнение задачи асинхронно). Вы должны быть осторожны с условиями гонки, хотя одни и те же задачи не выполняются дважды одновременно (задача celery должна проверять и обновлять статус задачи db, или вы можете использовать redis в качестве блокировки задачи).

Кроме того, celery уже предоставляет функцию ETA для программирования будущих задач - чего может быть недостаточно для ваших нужд, в зависимости от контекста.

...