class Node_Db_Context(object): def __init__(self, node_info): self.sync = RWLock() self.db = "db/" + str(node_info.key) + ".db" self.node_info = node_info self.own_start = None self.own_end = None #self.back_thread = threading.Thread(target=lambda: self.backup_loop(self)) #self.back_thread.daemon = True #self.back_thread.start() def write(self, hash_name, content): self.sync.writer_acquire() try: records = shelve.open(self.db) records[hash_name] = content records.close() print str(self.node_info) + " write block: " + hash_name finally: self.sync.writer_release() def read(self, hash_name): content = None self.sync.reader_acquire() try: records = shelve.open(self.db) if not records.has_key(hash_name): print str(self.node_info) + " read block: " + hash_name + " FAILED!!" content = "404 Error" else: print str(self.node_info) + " read block: " + hash_name content = records[hash_name] #this retrieved COPY OF CONTENT records.close() finally: self.sync.reader_release() return content