在django中,我们有一个Task
模型,其中包含一个'progress'Float字段。此进度浮点字段是基于相关输出的一些计算(Output
模型)计算的。我们使用一个触发器(使用django信号(保存Output
),每次输出值改变时重新计算进度Float字段。
这不能很好地扩展,当批量更新Output
时,会多次触发进度重新计算(阻塞,而不是异步),这只是在批量更新序列结束时才需要。
我正在寻求性能改进,并提出了以下解决方案选项
Task
对象中保存一个“脏”标志,让异步跑者(在节拍上)扫描这些脏标志并在需要时重新计算属性,或者我正在寻找一个正确的实现模式,它不会重新计算每个触发器的进度,但每n秒最多一次,并且在n秒后我确实具有一致的状态(正确计算的进度)。