#!/usr/bin/env python from happyfoo import happyfoo import wrap from threading import Lock if __name__ == "__main__": m = Lock() t1 = happyfoo("hello") t2 = happyfoo("world") # Hack the mutex onto our instance variables t1.mutex = m t2.mutex = m # local scope lock and unlock functions def do_lock(obj, *args, **kwds): print "%s attempting lock" % (obj.getName()) obj.mutex.acquire() print "%s acquired lock" % (obj.getName()) def do_unlock(obj, *args, **kwds): print "%s releasing lock" % (obj.getName()) obj.mutex.release() # wrap happyfoo.makenoise() with a locker (at runtime!) happyfoo.makenoise = wrap.wrapmethod(happyfoo.makenoise, do_lock, do_unlock) t1.start() t2.start() t1.join() t2.join()