我需要一个无限运行的后台任务,该任务每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
(可能无关吗?)
我的最终目标是,每次服务器重新启动时,队列将被清空,并且工作线程将重新启动(如果可能),并且此任务将无限期地在后台运行。