[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