缓存网页数据的好方法(和/或平台无关的地方)
我的pygtk程序是一个用于编辑基于XML的文档的工具,这些文档可能会引用其他文档,甚至是在线的,而这些文档又可能引用更多的文档。
当我加载一个文件时,程序会解析这些引用并加载相关的文档(这个过程是异步进行的)。不过,每次我启动编辑器时,这个过程都会重复,所以我想要一些本地缓存的机制,这样可以节省带宽和时间,对用户和托管这些引用文档的服务器都有好处。
有没有什么常见的方法可以做到这一点?到目前为止,我的想法是:
- 以某种方式获取一个缓存目录的路径(希望能在不同平台上都能用)
- 有没有什么好主意?
- 在这个目录里放一个名为
md5(url)
的文件。 - 如果已经存在一个缓存文件,并且它的时间没有超过
$cache_policy_age
,那么就使用这个文件;否则,使用HTTP(urllib
可以做到吗?)去检查这个文件自从下载以来是否有被修改过。
1 个回答
3
我个人使用 os.path.expanduser 来找到一个合适的缓存存放位置,这在Unix环境中很常见,因为大多数用户的配置和缓存都是保存在他们的主目录下。通常会使用一个以点开头的目录名,这样就会变成一个“隐藏”的目录。
我会这样做:
directory = os.path.join(os.path.expanduser("~"), ".my_cache")
至于远程文件的修改日期,你可以使用 urlib
:
import urllib
u = urllib.urlopen("http://www.google.com")
u.info().get("last-modified")
不过你需要确认你的HTTP服务器提供了最后修改的HTTP头信息,并且这个值是合理的!(这并不总是成立)