What you can do is subclass DbfilenameShelf
and override __setitem__
and __delitem__
to automatically sync after each change. Something like this would probably work (untested):
from shelve import DbfilenameShelf
class AutoSyncShelf(DbfilenameShelf):
# default to newer pickle protocol and writeback=True
def __init__(self, filename, protocol=2, writeback=True):
DbfilenameShelf.__init__(self, filename, protocol=protocol, writeback=writeback)
def __setitem__(self, key, value):
DbfilenameShelf.__setitem__(self, key, value)
self.sync()
def __delitem__(self, key):
DbfilenameShelf.__delitem__(self, key)
self.sync()
my_shelf = AutoSyncShelf("myshelf")
I can't vouch for the performance of this, of course.