问题描述
我正在考虑如何在服务器关闭的情况下确保完成存储在 Redis 队列中的所有任务,例如 我最初的想法是创建一个 job-description 实例并将其保存到数据库中。类似的东西:
class JobDescription(db.Model):
id = Column(...)
name = Column(...)
queue_name = (...)
is_started = (Boolean)
is_finished = (Boolean)
....
然后在必要时更新布尔标志。
因此,在 Flask/Django/FastApi 应用程序启动时,我会搜索未启动/未完成的作业。
我的问题是 - 是否有针对我在此处描述的内容的最佳实践或更好的方法来恢复丢失的工作而不是保存到数据库工作描述?
解决方法
你走在正确的轨道上。要在 Redis 重启后恢复 Rq 任务, 您必须记录它们,以便您可以确定需要重新延迟(排队)哪些作业。
您使用的 JobDescription
方法可以正常工作,但需要注意的是,随着时间的推移和 JobDescription
的基础表变大,除非您构建,否则查询该表将花费更长的时间is_finished
上的二级索引。
您可能会发现使用日期时间而不是布尔值可以为您提供更多选择。例如
started_at = db.Column(db.DateTime)
finished_at = db.Column(db.DateTime,index=True)
让您回答几个有用的问题,例如作业请求中是否存在有趣的模式随时间变化、完成延迟如何随时间变化等。