How do I know when a thread quits?

harold fellermann harold.fellermann at upf.edu
Tue Jun 7 13:52:51 EDT 2005


On 07.06.2005, at 16:44, harold fellermann wrote:

> import thread
>
> def parentThread() :
> 	lock = thread.allocate_lock()
> 	child = thread.start_new_thread(childThread,(parent,))
> 	lock.acquire()
>
> def childThread(parent) :
> 	parent.lock.acquire()
> 	do_something_with_vars_from(parent)
> 	parent.lock.release()
> 	# don't do anything with parents vars after releasing the lock
>
>
> I did not test it, but I cannot see any reason why this should fail.
>
>> After the childThread executes parent.lock.release() execution may be
>> taken away from it and given to the parent thread(note that the child
>> thread hasn't quit yet). The parent thread which is waiting on the
>> lock gets released and quits. Now the "still running" child thread
>> tries to exit and based on my assumption attempts to call some cleanup
>> func in some module which has been GC'ed due to the exit of the parent
>> thread. This leads to an exception being thrown.

 >> Referencing the module locally on the child thread does not seem 
like an
 >> elegant solution besides I don't know which modules are involved in
 >> cleaning

I wander how much an issue this fear really is. To my understanding, 
this
situation can only happen, when the child thread accessess a module that
was imported locally within the parent thread. Does anyone with a better
understanding of the internals of the interpreter know whether such a 
thing
can occur? If so, in what circumstances?

- harold -


--
The opposite of a correct statement is a false statement.
But the opposite of a profound truth may be another profound truth.
-- Niels Bohr




More information about the Python-list mailing list