Я согласен, что вам не нужна полностью развернутая база данных, так как кажется, что все, что вам нужно, - это атомарная запись в файл . Вам нужно решить эту проблему в двух частях: сериализации / десериализации и атомарной записи.
Для первого раздела, json
или pickle
, вероятно, являются подходящими форматами для вас. Преимущество JSON заключается в том, что он удобочитаем для человека. Хотя не похоже, что это основная проблема, с которой вы столкнулись.
Как только вы сериализовали свой объект в строку, используйте следующую процедуру для атомарной записи файла на диск, предполагая, что один записывающий объект одновременно (по крайней мере, в POSIX, см. Ниже):
import os, platform
backup_filename = "output.back.json"
filename = "output.json"
serialised_str = json.dumps(...)
with open(backup_filename, 'wb') as f:
f.write(serialised_str)
if platform.system() == 'Windows':
os.unlink(filename)
os.rename(backup_filename, filename)
Хотя os.rename
перезаписывает существующий файл и является атомарным в POSIX, к сожалению, в Windows это не так. В Windows существует вероятность того, что os.unlink
удастся, но os.rename
не удастся, что означает, что у вас есть только backup_filename
и нет filename
. Если вы ориентируетесь на Windows, вам нужно будет рассмотреть эту возможность, когда вы проверяете наличие filename
.
Если существует возможность более чем одного параллельного писателя, вам нужно будет рассмотреть конструкцию синхронизации.