[Yt-svn] yt-commit r719 - branches/yt-1.0/yt trunk/yt
mturk at wrangler.dreamhost.com
mturk at wrangler.dreamhost.com
Mon Aug 4 12:58:29 PDT 2008
Author: mturk
Date: Mon Aug 4 12:58:29 2008
New Revision: 719
URL: http://yt.spacepope.org/changeset/719
Log:
Added the SIGUSR1 signal processor to 1.0 and trunk. Also fixed a bug wherein
reason would be bogged down *completely* by updates in the GUI! Projections
are now tractable. I should have caught this bug a long time ago. (But, I
don't use the GUI that much, and mainly for slicing.)
Also, SIGUSR1 sent to the Python process, as long as its single-threaded, will
return to you a traceback when the GIL comes up next.
Modified:
branches/yt-1.0/yt/funcs.py
trunk/yt/funcs.py
Modified: branches/yt-1.0/yt/funcs.py
==============================================================================
--- branches/yt-1.0/yt/funcs.py (original)
+++ branches/yt-1.0/yt/funcs.py Mon Aug 4 12:58:29 2008
@@ -23,8 +23,17 @@
along with this program. If not, see <http://www.gnu.org/licenses/>.
"""
-import time, types
+import time, types, signal, traceback
import progressbar as pb
+from math import floor, ceil
+
+def signal_print_traceback(signo, frame):
+ print traceback.print_stack(frame)
+
+try:
+ signal.signal(signal.SIGUSR1, signal_print_traceback)
+except ValueError: # Not in main thread
+ pass
def blank_wrapper(f):
return lambda a: a
@@ -79,11 +88,17 @@
class GUIProgressBar:
def __init__(self, title, maxval):
import wx
+ self.maxval = maxval
+ self.last = 0
self._pbar = wx.ProgressDialog("Working...",
title, maximum=maxval,
style=wx.PD_REMAINING_TIME|wx.PD_ELAPSED_TIME|wx.PD_APP_MODAL)
def update(self, val):
- self._pbar.Update(val)
+ # An update is only meaningful if it's on the order of 1/100 or greater
+ if ceil(100*self.last / self.maxval) + 1 == \
+ floor(100*val / self.maxval) or val == self.maxval:
+ self._pbar.Update(val)
+ self.last = val
def finish(self):
self._pbar.Destroy()
Modified: trunk/yt/funcs.py
==============================================================================
--- trunk/yt/funcs.py (original)
+++ trunk/yt/funcs.py Mon Aug 4 12:58:29 2008
@@ -23,8 +23,17 @@
along with this program. If not, see <http://www.gnu.org/licenses/>.
"""
-import time, types
+import time, types, signal, traceback
import progressbar as pb
+from math import floor, ceil
+
+def signal_print_traceback(signo, frame):
+ print traceback.print_stack(frame)
+
+try:
+ signal.signal(signal.SIGUSR1, signal_print_traceback)
+except ValueError: # Not in main thread
+ pass
def blank_wrapper(f):
return lambda a: a
@@ -79,11 +88,17 @@
class GUIProgressBar:
def __init__(self, title, maxval):
import wx
+ self.maxval = maxval
+ self.last = 0
self._pbar = wx.ProgressDialog("Working...",
title, maximum=maxval,
style=wx.PD_REMAINING_TIME|wx.PD_ELAPSED_TIME|wx.PD_APP_MODAL)
def update(self, val):
- self._pbar.Update(val)
+ # An update is only meaningful if it's on the order of 1/100 or greater
+ if ceil(100*self.last / self.maxval) + 1 == \
+ floor(100*val / self.maxval) or val == self.maxval:
+ self._pbar.Update(val)
+ self.last = val
def finish(self):
self._pbar.Destroy()
More information about the yt-svn
mailing list