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. 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]
