Как бесконечно запускать фоновые задачи - PullRequest
0 голосов
/ 18 мая 2019

Мне нужна фоновая задача, которая выполняется бесконечно и выполняет запись в базу данных каждые 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 (может быть не связано?)

Моя конечная цель состояла бы в том, чтобы при каждом перезапуске сервера очереди очищались, а работники перезапускались (если это возможно), и эта задача выполнялась бы бесконечно в фоновом режиме.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...