Ежедневные задания сельдерея с Crontab - PullRequest
0 голосов
/ 03 сентября 2018

У меня проблема с ежедневными запланированными задачами с помощью crontab. Вот мой celery.py

app.conf.beat_schedule = {
    'run-cache-updater': {
        'task': 'tasks.run_cache_updater',
        'schedule': crontab(
            minute=0,
            hour='1-4'
        ),
    }
}

Ниже приведены мои задачи. То, что я делаю, это получение всех записей из БД. Запуск других заданий для обновления моих кешей в Redis.

@app.task
def run_cache_updater():
    batch_size = 1000
    cache_records = models.CacheRecords.objects.all()

    def _chunk_list(all_records, size_of_batch):
        for i in range(0, len(all_records), size_of_batch):
            yield [item.id for item in all_records[i: i + batch_size]]

    for items in _chunk_list(cache_records, batch_size):
        update_cache.delay(items)


@app.task
def update_cache(ids_in_chunks):
    for id in ids_in_chunks:
        # Some calls are done here. Then sleep for 200 ms.
        time.sleep(0.2)

Мои задачи выполняются хорошо. Тем не менее, они начинают работать между 1 и 4, а затем они начинают снова каждые 4 часа, как 8-11, 15-18 .. Что я здесь не так делаю и как мне это исправить?

1 Ответ

0 голосов
/ 04 сентября 2018

Это звучит как ошибка сельдерея, вероятно, стоит поднять на их репозитории Github.

Однако, в качестве обходного пути, вы можете попробовать более явную запись, hour='1,2,3,4', на тот случай, если проблема заключается в синтаксическом анализе этого конкретного стиля интервала crontab.

...