Python как полностью обеспечить запись файла при закрытии программы? - PullRequest
0 голосов
/ 05 сентября 2018

У меня есть скрипт на 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, чтобы мы могли что-то сделать, когда программа закрывается? (Кажется, что «с» здесь не полностью работает)

1 Ответ

0 голосов
/ 05 сентября 2018

Модуль atexit сделан именно для этой цели.

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

Просто помните, что он работает только для обычного завершения скрипта (Ctrl + C считается нормальным), и он не будет работать, если приложение внезапно завершит работу или вам придется принудительно закрыть его.

...