如何无限运行后台任务

时间:2019-05-18 10:44:31

标签: python flask redis

我需要一个无限运行的后台任务,该任务每30分钟写入一次数据库。

我正在将Flask与Redis和rq一起使用。

现在我正在运行redis服务器,有一个工作人员正在监听队列,并且在运行flask应用程序时,我为该工作人员提供了需要运行的功能。

我希望每次时钟在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(可能无关吗?)

我的最终目标是,每次服务器重新启动时,队列将被清空,并且工作线程将重新启动(如果可能),并且此任务将无限期地在后台运行。

0 个答案:

没有答案