使用Django模型的进度监控不同步(一个作者和多个读者)

时间:2012-07-13 20:12:56

标签: django django-models concurrency progress

我正在使用Django实现进度监控功能。但是,我无法在前端获得更新的值。

popen执行Django管理命令以不断更新webscan的进度。 Scan是Django模型,progress_info是模型的属性,保存在数据库中。代码如下:

            d = 10
            while (d) :
                time.sleep(10)
                try:
                    isBusy = server.call("framework.busy?")
                    logging.debug(isBusy)
                    if isBusy.strip() == 'true':
                        progress = webscan.progress
                        webscan.progress_info = progress
                        webscan.save()
                        logging.debug("%s"%progress)
                    else:
                        d = 0
                except Exception as e:
                    logging.debug("In an exception when calling busy. Exception: %s and Type %s"%(e, type(e)))
                    d -= 1

在前端,我进行ajax调用以获取progress_info的值。处理程序只需获取webscan.progress_info的值并将其返回到前端。代码如下:

@property
def get_progress(self):
    return self.progress_info

使用数据库的GUI,我可以看到progress_info的值保持更新。但是,ajax调用会一直将0返回到前端,直到命令结束(0是progress_info的初始值)。

我想这是因为DB或Django的锁定机制,但不完全理解为什么。任何人都可以帮我吗?非常感谢〜

0 个答案:

没有答案