Killing threads

ericwoodworth at gmail.com ericwoodworth at gmail.com
Sun Apr 5 23:25:39 EDT 2009


On Apr 5, 11:07 pm, Dennis Lee Bieber <wlfr... at ix.netcom.com> wrote:
> On Sun, 5 Apr 2009 17:27:15 -0700 (PDT), imageguy
> <imageguy1... at gmail.com> declaimed the following in
> gmane.comp.python.general:
>
> > In threading.Event python 2.5 docs say;
> > "This is one of the simplest mechanisms for communication between
> > threads: one thread signals an event and other threads wait for it. "
>
> > Again, I have limited experience, however, in my reading of the
> > threading manual and review examples, Events were specifically design
> > to be a thread safe way to communicate a 'state' to running threads ?
> > In the OP's example 'do stuff' was open to wide interpretation,
> > however, if within the thread's main 'while' loop the tread checks to
> > see if the 'keepgoing' Event.isSet(), in what scenario would this
> > create deadlock ?
>
>         If you are going to perform a CPU intensive polling loop, there is
> no sense in using the Event system in the first place... Just create a
> globally accessible flag and set it to true when you want to signal the
> threads (or false if you don't want to use the negation "while not
> flagged: do next processing step")
>
>         Event is optimized for the case wherein threads can WAIT (block) on
> the Event object.
> --
>         Wulfraed        Dennis Lee Bieber               KD6MOG
>         wlfr... at ix.netcom.com             wulfr... at bestiaria.com
>                 HTTP://wlfraed.home.netcom.com/
>         (Bestiaria Support Staff:               web-a... at bestiaria.com)
>                 HTTP://www.bestiaria.com/


Well it turns out my problem was with queues not with threads.  I had
a self.die prop in my thread object that defaults to FALSE and that I
set to true when i wanted the thread to die.  then my loop would be
while not die:  It seemed pretty simple so I didn't know why it was
failing.  What I didn't know, because I'm quite new to python, is that
queue.get was blocking.  So my producer thread why dying immediately
but my worker threads were all blocking on their queue.gets.  So they
were never falling off the loop.  I changed it to queue.get_nowait()
and added a queue.empty exception and everything worked as expected.

So I thought I knew what was going on and that I was having a really
esoteric problem when i was actually having a pretty boring problem I
didn't recognize.

Thanks everybody for the help!



More information about the Python-list mailing list