Я хотел бы, чтобы уникальная база данных 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 элементов (ключ и значение обоих целых чисел).