如何基于每n秒的大量计算智能更新一个值(性能)

时间:2017-01-21 12:19:41

标签: python django performance asynchronous

在django中,我们有一个Task模型,其中包含一个'progress'Float字段。此进度浮点字段是基于相关输出的一些计算(Output模型)计算的。我们使用一个触发器(使用django信号(保存Output),每次输出值改变时重新计算进度Float字段。

这不能很好地扩展,当批量更新Output时,会多次触发进度重新计算(阻塞,而不是异步),这只是在批量更新序列结束时才需要。

我正在寻求性能改进,并提出了以下解决方案选项

  1. Task对象中保存一个“脏”标志,让异步跑者(在节拍上)扫描这些脏标志并在需要时重新计算属性,或者
  2. 仅更新进度(如果已更新)> n秒前(TTL)或
  3. 延迟(放入异步队列)n秒,如果同时将另一个进度重新计算任务放入队列,则删除原始任务。
  4. 我正在寻找一个正确的实现模式,它不会重新计算每个触发器的进度,但每n秒最多一次,并且在n秒后我确实具有一致的状态(正确计算的进度)。

0 个答案:

没有答案