我有一个 python 脚本,可以将一些信息缓存到文件中。如果存在,该文件将被重用。否则脚本会调用其他一些函数来生成这样的文件,这需要很长时间。文件名有一定的模式,它们都存储在 $WORKING_DIRECTORY 中
def dummy(param):
fname = "file"+params
if fname exists in $WORKING_DIR:
reuse file
else:
long_time_process(param)
create file in $WORKING_DIR
由于这个虚拟函数会以不同的参数被多次调用,因此会生成很多文件。我想保持目录大小适中,文件中的信息相对最新。所以我想为目录的大小设置一个阈值。一旦达到限制,我将删除最旧的文件,直到目录大小减少到 THRESHOLD 的一半。
我目前的解决方案是:
def dummy(param):
purge($WORKING_DIR)
...#Rest of dummy logic
def purge(dir):
if get_size(dir) > THRESHOLD:
while get_size(dir) > THRESHOLD/2:
remove oldest file
def get_size(dir):
size = 0
for file in dir:
size = size + file.size()
return size
这肯定会起作用,但大多数时候都不需要调用 purge,因为它只会在 1000 次调用后达到 THRESHOLD 一次。最重要的是,如果文件数量很大,目录的 get_size 也可能很耗时。
所以问题是如何优化 get_size 并将清除逻辑与我当前的虚拟函数集成?有没有一个好的pythonic方法来做到这一点?或者我可以使用的模式?谢谢