Killing threads

bieffe62 at gmail.com bieffe62 at gmail.com
Mon Apr 6 09:45:47 CEST 2009


On 6 Apr, 05:25, ericwoodwo... at gmail.com wrote:
> 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!>

I've gone through that also, when I started with python threads :-)
Be aware that using get_nowait may lead to your thread using too much
CPU in checking a queue often empty. I tend to use  Queue.get with a
timeout, smaller enough to keep the thread responsive but large enough
not
to waste CPU in too-frequent checks.

Ciao
-----
FB



More information about the Python-list mailing list