def prune(self, expiry_time):
        def expire_db(db_path, lock):
            remove = []
            with lock:
                db = anydbm.open(os.path.join(self.root, db_path), 'c')
                # The database returned by anydbm is guaranteed to have a
                # .keys() method, but not necessarily .(iter)items().
                for key in db.keys():
                    if int(time.time() - float(db[key])) >= expiry_time:
                        # Rounding to nearest int avoids an issue when we call
                        # call prune(0) *immediately* after an insertion and might
                        # get hit by floating point weirdness.
                        remove.append(key)
                log.info("Expiring %d events from %s" % (len(remove), db_path))
                for key in remove: del db[key]
                db.close()

        return DeferredList(
            [
                deferToThread(expire_db, db_path, lock)
                for db_path, lock in self.databases.items()
            ]
        )
.. note: Addresses here are represented as type/length/value
dataset/ETHPy150Open jdswinbank/Comet/comet/utility/event_db.py/Event_DB.prune--crossover with--dataset/ETHPy150Open nskinkel/oppy/oppy/cell/fixedlen.py/NetInfoCell.__init__