confusing thread behavior

P

paul

I have been experiencing strange thread behavior when I pass a message
received via a Queue to a wx.PostEvent method (from wxPython). The
relevant code in the thread is:

def run(self):
while self.is_running:
task = self.queue.get()
wx.PostEvent(self.app.handle_task, task)

self.queue is a Queue.Queue instance and self.app is a wx.Window
instance

I have a case where two items are placed in the queue one after the
other, and it appears that only the first item is passed to
wx.PostEvent. If I place a time.sleep(0.1) call anywhere within the
while loop, both items get passed to wx.PostEvent. It works if I put
time.sleep before the self.queue.get(), in between get() and PostEvent
() or after PostEvent(). So it seems like a short delay is enough to
get two items handled, although it doesn't seem to matter where I
place the delay within the while loop. Does someone know what might
explain this behavior? Thanks.
 
M

Mike Driscoll

I have been experiencing strange thread behavior when I pass a message
received via a Queue to a wx.PostEvent method (from wxPython). The
relevant code in the thread is:

def run(self):
    while self.is_running:
        task = self.queue.get()
        wx.PostEvent(self.app.handle_task, task)

self.queue is a Queue.Queue instance and self.app is a wx.Window
instance

I have a case where two items are placed in the queue one after the
other, and it appears that only the first item is passed to
wx.PostEvent.  If I place a time.sleep(0.1) call anywhere within the
while loop, both items get passed to wx.PostEvent.  It works if I put
time.sleep before the self.queue.get(), in between get() and PostEvent
() or after PostEvent().  So it seems like a short delay is enough to
get two items handled, although it doesn't seem to matter where I
place the delay within the while loop.  Does someone know what might
explain this behavior?  Thanks.

[Note: I cross-posted this to wxPython where Paul had also cross-
posted]

Not sure if this will help or not, but see the following article on
the wxPython wiki:

http://wiki.wxpython.org/LongRunningTasks

There's a section called "More Tips" where Queues are discussed. Robin
Dunn (creator of wxPython) seems to recommend using wx.CallAfter there
rather than PostEvent.
 
P

paul

I have been experiencing strange thread behavior when I pass a message
received via a Queue to a wx.PostEvent method (from wxPython). The
relevant code in the thread is:
def run(self):
    while self.is_running:
        task = self.queue.get()
        wx.PostEvent(self.app.handle_task, task)
self.queue is a Queue.Queue instance and self.app is a wx.Window
instance
I have a case where two items are placed in the queue one after the
other, and it appears that only the first item is passed to
wx.PostEvent.  If I place a time.sleep(0.1) call anywhere within the
while loop, both items get passed to wx.PostEvent.  It works if I put
time.sleep before the self.queue.get(), in between get() and PostEvent
() or after PostEvent().  So it seems like a short delay is enough to
get two items handled, although it doesn't seem to matter where I
place the delay within the while loop.  Does someone know what might
explain this behavior?  Thanks.

[Note: I cross-posted this to wxPython where Paul had also cross-
posted]

Not sure if this will help or not, but see the following article on
the wxPython wiki:

http://wiki.wxpython.org/LongRunningTasks

There's a section called "More Tips" where Queues are discussed. Robin
Dunn (creator of wxPython) seems to recommend using wx.CallAfter there
rather than PostEvent.


I apologize -- I meant to type wx.CallAfter instead of wx.PostEvent in
my posting here (I've actually tried both approaches and did not see
any difference...). I've looked over the LongRunningTasks wiki. I'll
look at it again!
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

No members online now.

Forum statistics

Threads
473,756
Messages
2,569,540
Members
45,024
Latest member
ARDU_PROgrammER

Latest Threads

Top