在django中缓存数据库查询

时间:2012-08-21 09:35:37

标签: python database django caching

我有使用两个外部脚本的django应用程序。一个脚本将文件从A移动到B,将B的值存储在数据库中 - 之后存在,这应该提交任何可能打开的事务。下一个脚本对文件的移动作出反应(使用inotify),计算md5sum(显然需要时间),然后在数据库中查找条目,如 x = Queue.get(filename=location)。 查看我的日志的时间戳,我100%确定第一个脚本在第二个脚本(实际上是一个守护程序)运行查询之前已经完成了很长时间。有趣的是,在重启守护进程后,这个功能完美无缺。

这让我相信,在守护进程的运行时期间,以某种方式查询Queryset(我实际上每次使用inotify检测到新文件时运行上面显示的代码)。但是我不想一直重启守护进程,而是强制查询实际使用数据库而不是缓存。

django文档没有说太多 - 但通常django不用作外部:)

提前感谢您的任何提示!

PS:根据请求,来自守护程序的相关部分的来源

def _get_info(self, path):
    try:
        obj = Queue.objects.get(filename=path)
        x = obj.x
        return x
    except Exception, e:
        self.logger.error("Error in lookup: %s" % e)
        return None

每次将新文件移动到监视目录时,都会被线程调用

第一个脚本中的代码看起来像

for f in Queue.objects.all():
    if (matching_stuff_here):
         f.filename = B
         f.save()    
         sys.exit(0)

1 个答案:

答案 0 :(得分:0)

您尚未显示任何实际代码,因此我们必须猜测。我的猜测是,即使第一个脚本中的事务已完成并已提交,您仍然在脚本B中的打开事务中:并且由于事务隔离,在完成事务之前,您不会看到B中的任何更改那里。