[Tutor] Waiting until a thread ends
lists at justuber.com
Sat Mar 19 11:38:32 CET 2011
>> Only really glanced at this, but you seem to be checking only the last
>>> thread *after* the loop? Surely you should be storing all the threads in a
>>> list (or someplace) as you create them, and then check them all for liveness
>>> and if so join them each in turn, to ensure you only print 'FINISHED' once
>>> you've checked and confirmed that all the threads created have in fact
>> That makes absolute sense. Doh on my part!
> Just done a little more reading and came across this in an O'Reilly article
> here http://www.oreillynet.com/onlamp/blog/2008/01/pymotw_threading.html
> Seems like an elegant way to accomplish a wait until all running threads
> have finished.
> Using enumerate() to wait for all running threads:
> It is not necessary to retain an explicit handle to all of the daemon
> threads you start in order to ensure they have completed before exiting the
> main process. threading.enumerate()returns a list of active Thread instances.
> The list includes the current thread, and since joining the current thread
> is not allowed (it introduces a deadlock situation), we must check before
In my continuing quest the find the best way of doing this I came across the
for thread in threading.enumerate():
if thread is not threading.currentThread():
In my newbie understanding, you can't join() the current thread, because
it's the main thread (the one from which the others are called), join()ing
it would lock the program up (it would never complete).
The above only join()s a thread if it isn't the current thread, thus
(hopefully) getting around this. Swapping my earlier stupid code for this
seems to work as expected in my tests.
-------------- next part --------------
An HTML attachment was scrubbed...
More information about the Tutor