我有一个Python脚本,该脚本在运行时每秒转储yaml文件。但是,我发现yaml文件有时没有完成。我的猜测是,在保存文件的同时,我正在关闭进度(脚本在Windows推荐行中运行),这是一个巧合。示例代码如下:
class State(object):
def __init__(self):
...
self.__t = threading.Thread(name='StateAutoSave', target=self.__auto_save)
self.__t.start()
def __auto_save(self):
while 1:
try:
...
self.__save()
except Exception as err:
logging.exception(err)
time.sleep(1)
def __save(self):
...
with open(self.__yaml_file, 'w') as outfile:
yaml.dump(data, outfile, default_flow_style=False)
如何避免这个问题?还是在python中有类似析构函数的方法,以便当程序关闭时我们可以做些什么? (似乎“ with”在这里不能完全起作用)
答案 0 :(得分:0)
为此目的而制作了atexit模块。
https://docs.python.org/3/library/atexit.html
请注意,它仅适用于脚本的正常终止(ctrl + c被认为是正常的),如果您的应用突然崩溃或必须强制将其关闭,它将不起作用。