from threading import local, Thread import time import random class LocalStuff(local): def __init__(self, stuff, foo=1): local.__init__(self) self.stuff = stuff self.foo = foo class TestThread(Thread): def __init__(self, stuff, name): Thread.__init__(self) self.stuff = stuff self.name = name def run(self): for x in range(10): self.stuff.stuff = self.name myStuff = self.stuff.stuff time.sleep(random.random() * 2) print("myStuff=%r, threadStuff=%r" % (myStuff, self.stuff.stuff)) if myStuff != self.stuff.stuff: raise Exception() if self.stuff.foo != 1: raise Exception("foo should be 1") if __name__ == "__main__": stuff = LocalStuff("main stuff") for x in range(20): TestThread(stuff, name=("thread-%d" % x)).start() print("main stuff=%r" % stuff.stuff)