Мне нужна фоновая задача, которая выполняется бесконечно и выполняет запись в базу данных каждые 30 минут.
Я использую Flask с Redis и RQ.
Прямо сейчас у меня работает redis-сервер, у меня есть работник, слушающий очередь, и при запуске приложения фляги я предоставляю этому работнику функцию, которая должна быть запущена.
Я хочу, чтобы действие происходило каждый раз, когда на часах 30 минут или 0 минут:
код запуска сервера:
app.redis = Redis.from_url(app.config['REDIS_URL'])
app.task_queue = rq.Queue('tasks', connection=app.redis)
app.task_queue.enqueue('app.tasks.my_infinite_task')
код задачи:
current_minutes = None
while True:
minutes = datetime.utcnow().minute
if minutes == 0 or minutes == 30:
if current_minutes is None or minutes != current_minutes:
current_minutes = minutes
for user in User.query.all():
user.count += 1
db.session.commit()
sleep(1)
Это правильный подход?
Прямо сейчас это работает, но не согласуется, через долгое время я получаю JobTimeoutException
(может быть не связано?)
Моя конечная цель состояла бы в том, чтобы при каждом перезапуске сервера очереди очищались, а работники перезапускались (если это возможно), и эта задача выполнялась бы бесконечно в фоновом режиме.