[EMAIL PROTECTED] wrote: > I'm writing an NxN observer pattern, mostly for my own personal > exploration. Two threads -might- be calling 'Disconnect' at the same > time, and I can't even guarantee that the function runs properly. > > for emelem in [ e for e in emlist if e.func is func ]: > try: > emlist.remove( emelem ) > except ValueError: > pass
so use a lock. it's a whopping two lines of code: creation: lock = threading.Lock() usage: with lock: for emelem in ... ... more here: http://effbot.org/zone/thread-synchronization.htm and btw, looping over a list to figure out what you want to remove from that list is a bit pointless. better just create a new list: with lock: # get rid of all func instances emlist = [e for e in emlist if e.func is not func] an alternative approach would be to replace emlist with a dictionary, keyed on func objects. that'll let you remove all items associated with a given function with a single atomic operation: del emdict[func] </F> -- http://mail.python.org/mailman/listinfo/python-list