Выход из системы с сохранением данных

Возникла проблема с сохранением данных после завершения работы системы. Взял код, который записывает звук с устройства, и немного его модифицировал для своих нужд. Но столкнулся с проблемой сохранения данных, если экстренно выключается компьютер. Пробовал через функцию sys.exit и через try ... finally. Может, подскажите какой-нибудь вариант или источник, где можно поискать ответ?

import pyaudio
import wave
# имя файла для записи
filename = "recorded1.wav"
# установить размер блока в 1024 сэмпла
chunk = 49152
# образец формата
FORMAT = pyaudio.paInt16
# моно, если хотите стере измените на 2
channels = 1
# 44100 сэмплов в секунду
sample_rate = 11025
record_hours = 3600
# initialize PyAudio object
p = pyaudio.PyAudio()
# открыть объект потока как ввод и вывод
stream = p.open(format=FORMAT,
                channels=channels,
                rate=sample_rate,
                input=True,
                output=True,
                frames_per_buffer=chunk)
frames = []
print("Recording...")
for i in range(int(66150 / chunk * record_hours)):
    data = stream.read(chunk)
    # если вы хотите слышать свой голос во время записи
    # stream.write(data)
    frames.append(data)
print("Finished recording.")
# остановить и закрыть поток
stream.stop_stream()
stream.close()
# завершить работу объекта pyaudio
p.terminate()
# сохранить аудиофайл
# открываем файл в режиме 'запись байтов'
wf = wave.open(filename, "wb")
# установить каналы
wf.setnchannels(channels)
# установить формат образца
wf.setsampwidth(p.get_sample_size(FORMAT))
# установить частоту дискретизации
wf.setframerate(sample_rate)
# записываем кадры как байты
wf.writeframes(b"".join(frames))
# закрыть файл
wf.close()

Ответы (1 шт):

Автор решения: passant

Если во время работы вашего кода внезапно отключился компьютер, на него падает кирпич, его заливает вулканической лавой, на дом падает метеорит и пр. то ничто в этот момент ваши данные, находящиеся в оперативной памяти, уже не спасет. Что бы сохранить данные их надо ПРЕДВАРИТЕЛЬНО записывать на устройство хранения, которое может защитить от некоторых перечисленных выше событий. (Мне приходилось принимать участие в опроекте, в котором данные копировались на устройства хранения, расположенные в более сотни километров от компьютеров в шахте где-то в Альпах - что-бы их сохранить даже в случае атомного взрыва, во как!). Поэтому надо пересмотреть архитектуру вашего приложения, и не на try... except расчитывать, а просто записывать на внешнее устройство входные (или какие вы хотите сохранить данные) даже раньше, чем начнете обработку их очередной входной порции.

→ Ссылка