import threading import random import time import sys sys.setswitchinterval(0.0001) 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): return self.value == other.value def __hash__(self): return hash(self.value) key1 = Key(tuple(range(10000))) key2 = Key(tuple(range(10000))) 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()