like below fixes the issue Summarising SJuan76 and the op's discussion: Looks like there are two references to t, but only one to b (the one inside t). t will not get released, because the threads hold it independently. However, b may be deleted (depending on gc) because its ref count will drop to zero once the reference is nullified.
Hope this helps Use t1 = threading.Thread( target = obj.foo ) instead. In this case, the Thread constructor is expecting a reference to a function...when you pass it obj.foo(), you are passing it the result of the foo() function. That's not what you want! Pass a reference to the function.
Get target Object in Aspect and call another method on target object