On Dec 3, 3:42 pm, paul <phart...@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 -- http://mail.python.org/mailman/listinfo/python-list