import shelve, os, time, sha class Foo: def __init__(self): self.data = sha.new(repr(time.time())).hexdigest() nobjects = 100000 try: os.unlink('speedtest.db') except OSError: print "creating db file" start = time.time() db = shelve.open('speedtest') i = nobjects while i > 0: db[str(i)] = Foo() db.sync() i = i - 1 db.close() t = time.time() - start print t, " sec for ", nobjects, " objects; ", t/nobjects, " sec/object"
On a 2 GHz MacBook with 1 GB of RAM and Python 2.3.5 the run time for this program is around 7 seconds. ("7.00173902512 sec for 100000 objects; 7.00173902512e-05 sec/object", the AnyDBM backend being "Berkeley DB 1.85 (Hash, version 2, native byte-order)".) Omitting the .sync() call shaves a few hundred milliseconds from that.
See also: http://codeidol.com/python/python3/Databases-and-Persistence/Shelve-Files/