On Thursday, September 30, 2010 07:47:53 am Nate Lowrie wrote: > On 9/30/10 10:24 AM, John Fabiani wrote: > > On Wednesday, September 29, 2010 10:15:24 pm Paul McNett wrote: > >> dabo Commit > >> Revision 6038 > >> Date: 2010-09-29 22:15:23 -0700 (Wed, 29 Sep 2010) > >> Author: Paul > >> Trac: http://trac.dabodev.com/changeset/6038 > >> > >> Changed: > >> U trunk/dabo/dReportWriter.py > >> U trunk/dabo/ui/uiwx/__init__.py > >> > >> Log: > >> Ever since introducing the report progress bar, I've received about 3 > >> error logs from customers per month with the 'wx.Yield called > >> recursively' error, and I've never been able to reproduce it on my end. > >> > >> I did some Googling, and someone in May found a workaround that solved > >> the problem for him. I've added a _safe=False argument to > >> dabo.ui.yieldUI: when True, the new code is run. I changed the > >> yieldUI() calls from dReportWriter to yieldUI(_safe=True) to test it in > >> the field. It doesn't seem to break anything. I wanted to keep the > >> argument "private" for now until it has a track record, at which point > >> it'll probably become the default code for yieldUI(). > >> > >> Here's the link to the article I got the code from: > >> http://www.python-forum.org/pythonforum/viewtopic.php?f=4&t=18801 > >> > >> > >> > >> Diff: > >> Modified: trunk/dabo/dReportWriter.py > >> =================================================================== > >> --- trunk/dabo/dReportWriter.py 2010-09-27 00:36:01 UTC (rev 6037) > >> +++ trunk/dabo/dReportWriter.py 2010-09-30 05:15:23 UTC (rev 6038) > >> @@ -54,14 +54,14 @@ > >> > >> win = self.ProgressControl > >> > >> if win: > >> win.updateProgress(self.RecordNumber+1, > >> len(self.Cursor)) > >> > >> - dabo.ui.yieldUI() > >> + dabo.ui.yieldUI(_safe=True) > >> > >> def _hideProgress(self): > >> win = self.ProgressControl > >> > >> if win: > >> win.hide() > >> win.Form.fitToSizer() > >> > >> - dabo.ui.yieldUI() > >> + dabo.ui.yieldUI(_safe=True) > >> > >> def _getEncoding(self): > >> try: > >> Modified: trunk/dabo/ui/uiwx/__init__.py > >> =================================================================== > >> --- trunk/dabo/ui/uiwx/__init__.py 2010-09-27 00:36:01 UTC (rev 6037) > >> +++ trunk/dabo/ui/uiwx/__init__.py 2010-09-30 05:15:23 UTC (rev 6038) > >> @@ -324,9 +324,14 @@ > >> > >> return ret > >> > >> -def yieldUI(*args, **kwargs): > >> > >> +def yieldUI(_safe=False, *args, **kwargs): > >> """Yield to other apps/messages.""" > >> > >> - wx.Yield(*args, **kwargs) > >> + if _safe: > >> + while wx.GetApp().Pending(): > >> + wx.GetApp().Dispatch() > >> + wx.GetApp().Yield(True) > >> + else: > >> + wx.Yield(*args, **kwargs) > >> > >> def beep(): > > Have you tested on Linux? I have/had major issues with yield() working > > just fine on windows and just locking up on linux. BTW the reason for > > using yield was to allow a simple way to stop printing (or producing > > output). So maybe you can find an universal way to stop the output from > > reports. > > Why not just spawn a new thread to handle the report generation and have > a cancel semaphore? > > Regards, > > Nate
Many things were tested and failed. Linux has been and still is a pain in the A__ when it comes to the threads I needed. BTW one of the real problems was having the dialogs appear correctly (and timely). Like I said the windows versions always worked - so windows was not the issue. On the linux side threads worked as long as there were no interactive dialogs. For example presenting a 'areYouSure' dialog would just lock up Linux from the thread. Johnf _______________________________________________ Post Messages to: [email protected] Subscription Maintenance: http://leafe.com/mailman/listinfo/dabo-dev Searchable Archives: http://leafe.com/archives/search/dabo-dev This message: http://leafe.com/archives/byMID/[email protected]
