对于涉及好多步计算的程序测试,每一步都耗时好久。前几步生成的文件保存下来,这个样当后面某一步出错时,重新启动程序,前面几步能直接读取文件而不用重新生成。
import os
import time
import pickle
from functools import wraps
TEMP_PATH = ''
def handle_mid(func):
"""
存在文件就读文件内容返回;
不存在文件就运行函数并保存返回值;
"""
filepath = TEMP_PATH + func.__name__
@wraps(func)
def get_data(*args, refresh=False, **kwargs):
if refresh==False and os.path.exists(filepath):
print('read data from file')
with open(filepath, 'rb') as f:
data = pickle.load(f)
return data
else:
data = func(*args, **kwargs)
print('save data')
with open(filepath, 'wb') as f:
pickle.dump(data, f)
return data
return get_data
@handle_mid
def gen_mid():
print('generate data')
mid = [1,2,3]
time.sleep(10) # 模拟计算用时
return mid
先后运行结果:
>>> gen_mid()
generate data
save data
[1, 2, 3]
>>> gen_mid()
read data from file
[1, 2, 3]
>>> gen_mid(refresh=True)
generate data
save data
[1, 2, 3]