On 6 Apr, 05:25, ericwoodwo...@gmail.com wrote: > On Apr 5, 11:07 pm, Dennis Lee Bieber <wlfr...@ix.netcom.com> wrote: > > > > > > > On Sun, 5 Apr 2009 17:27:15 -0700 (PDT), imageguy > > <imageguy1...@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...@ix.netcom.com wulfr...@bestiaria.com > > HTTP://wlfraed.home.netcom.com/ > > (Bestiaria Support Staff: web-a...@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 -- http://mail.python.org/mailman/listinfo/python-list