confusing thread behavior

Mike Driscoll kyosohma at gmail.com
Thu Dec 3 17:03:40 EST 2009


On Dec 3, 3:42 pm, paul <phart... at gmail.com> wrote:
> 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.

-------------------
Mike Driscoll

Blog:   http://blog.pythonlibrary.org



More information about the Python-list mailing list