Python如何在关闭程序时确保文件完全写入?

时间:2018-09-05 08:25:57

标签: python destructor

我有一个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”在这里不能完全起作用)

1 个答案:

答案 0 :(得分:0)

为此目的而制作了atexit模块。

https://docs.python.org/3/library/atexit.html

请注意,它仅适用于脚本的正常终止(ctrl + c被认为是正常的),如果您的应用突然崩溃或必须强制将其关闭,它将不起作用。