import threading import random import time def hammer_dict(d={}): global running while running: k = key1 if random.randrange(2) else key2 d[k] = 1 try: del d[k] except KeyError: pass except: running = False raise class Key: def __init__(self, x): self.value = x def __eq__(self, other): time.sleep(0.1) return self.value == other.value def __hash__(self): return hash(self.value) key1 = Key(1) key2 = Key(2**61) num_threads = 2 threads = [threading.Thread(target=hammer_dict) for x in range(num_threads)] running = True for t in threads: t.start() for t in threads: t.join()