我正在编写一个下载大文件(~150MB)的程序,并将数据解析为更有用的文本格式文件。下载,特别是解析的过程很慢(总共约20分钟),所以我想缓存结果。
下载的结果是一堆文件,解析的结果是单个文件,所以我可以手动检查这些文件是否存在,如果存在,检查修改时间;但是,由于我已经在代码的其他地方使用带有redis后端的dogpile进行Web服务调用,我想知道是否可以使用dogpile进行此操作?
所以我的问题是:可以根据修改时间使用dogpile来缓存文件吗?
答案 0 :(得分:0)
为什么你不希望将程序划分为几个部分:
下载
解析器&保护程序
有结果的工人
您可以使用缓存变量来存储您需要的值,您将在文件更新时更新。
import os
import threading
_lock_services=threading.Lock()
tmp_file="/tmp/txt.json"
update_time_sec=3300
with _lock_services:
# if file was created more the 50min ago
# here you can check if file was updated and update your cache variable
if os.path.getctime(tmp_file) < (time.time() - update_time_sec):
os.system("%s >%s" %("echo '{}'",tmp_file))
with open(tmp_file,"r") as json_data:
cache_variable = json.load(json_data)