python缓存技术,Python文件缓存

I'm creating some objects from files (validators from templates xsd files, to draw together other xsd files, as it happens), and I'd like to recreate the objects when the file on disk changes.

I could create something like:

def getobj(fname, cache = {}):

try:

obj, lastloaded = cache[fname]

if lastloaded < last_time_written(fname):

# same stuff as in except clause

except KeyError:

obj = create_from_file(fname)

cache[fname] = (obj, currenttime)

return obj

However, I would prefer to use someone else's tested code if it exists. Is there an existing library that does something like this?

Update: I'm using python 2.7.1.

解决方案

Your code (including the cache logic) looks fine.

Consider moving the cache variable outside the function definition. That will make it possible to add other functions to clear or inspect the cache.

If you want to look at code that does something similar, look at the source for the filecmp module: http://hg.python.org/cpython/file/2.7/Lib/filecmp.py The interesting part is how the stat module is used to determine whether a file has changed. Here is the signature function:

def _sig(st):

return (stat.S_IFMT(st.st_mode),

st.st_size,

st.st_mtime)

你可能感兴趣的:(python缓存技术)