我在想如何在服务器关闭的情况下确保存储在Redis队列中的所有任务的完成,例如,我最初的想法是创建一个作业描述实例并将其保存到数据库中。类似于:
class JobDescription(db.Model):
id = Column(...)
name = Column(...)
queue_name = (...)
is_started = (Boolean)
is_finished = (Boolean)
....然后在必要时更新布尔标志。
因此,在Flask/Django/FastApi应用程序启动时,我会搜索未启动/未完成的作业。
我的问题是-有没有我在这里描述的最佳实践,或者有更好的方法来恢复失去的工作,而不是保存到数据库的工作描述?
发布于 2021-07-05 08:09:28
你在正确的轨道上。要在Redis重启后恢复Rq任务,您必须记录它们,以便确定哪些作业需要重新延迟(排队)。
您正在使用的JobDescription方法可以很好地工作,但需要注意的是,随着时间的推移和JobDescription的底层表变得更大,除非在is_finished上构建辅助索引,否则查询该表将需要更长的时间。
您可能会发现,使用日期时间而不是布尔值为您提供了更多的选择。例如。
started_at = db.Column(db.DateTime)
finished_at = db.Column(db.DateTime, index=True)让您回答几个有用的问题,例如,随着时间的推移,作业请求中是否存在有趣的模式,完成延迟如何随时间变化等。
https://stackoverflow.com/questions/68249431
复制相似问题