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