Я хотел бы, чтобы уникальная база данных dict (key/value) была доступна из нескольких сценариев Python, запущенных одновременно.
Если script1.py обновляет d[2839], тогда script2.py должно увидеть измененное значение при запросе d[2839] через несколько секунд после.
-
Я думал об использовании SQLite, но кажется, что одновременная запись/чтение из нескольких процессов не является силой SQLite (скажем,
script1.pyтолько что изменилd[2839], какscript2.pyсоединение SQLite знает он должен перезагрузить эту конкретную часть базы данных?) -
Я также думал о блокировке файла, когда хочу сбросить изменения (но это довольно сложно сделать) и использовать
json.dumpдля сериализации, затем, пытаясь обнаружить изменения, используйтеjson.loadдля перезагрузки, если какая-либо модификация и т.д.... о нет, я изобретаю колесо и заново изобретаю особенно неэффективную базу данных ключ/значение! -
redis выглядел как решение, но официально не поддерживает Windows, то же самое относится к leveldb.
-
несколько сценариев, возможно, захотят записать точно в одно и то же время (даже если это очень редкое событие), есть ли способ, которым система БД справляется с этим (благодаря параметру блокировки? Кажется, что SQLite по умолчанию не может этого сделать, потому что SQLite поддерживает неограниченное количество одновременных считывателей, но это позволит только одному писателю в любой момент времени.)
Что для этого было бы Pythonic?
Примечание. Я нахожусь в Windows, а dict должен иметь максимум 1M элементов (ключ и значение обоих целых чисел).