فهرست منبع

wxGUI/render: replace CmdThread by gThread (multithread rendering optimization)

git-svn-id: https://svn.osgeo.org/grass/grass/trunk@65234 15284696-431f-4ddb-bdfa-cd5b030d7da7
Martin Landa 10 سال پیش
والد
کامیت
4c815685d7
1فایلهای تغییر یافته به همراه13 افزوده شده و 13 حذف شده
  1. 13 13
      gui/wxpython/core/render.py

+ 13 - 13
gui/wxpython/core/render.py

@@ -43,7 +43,7 @@ from core.ws       import RenderWMSMgr
 from core.gcmd     import GException, GError, RunCommand
 from core.gcmd     import GException, GError, RunCommand
 from core.debug    import Debug
 from core.debug    import Debug
 from core.settings import UserSettings
 from core.settings import UserSettings
-from core.gconsole import CmdThread, GStderr, EVT_CMD_DONE
+from core.gthread import gThread
 
 
 class Layer(object):
 class Layer(object):
     """Virtual class which stores information about layers (map layers and
     """Virtual class which stores information about layers (map layers and
@@ -341,11 +341,9 @@ class RenderLayerMgr(wx.EvtHandler):
         self.layer = layer
         self.layer = layer
          
          
         wx.EvtHandler.__init__(self)
         wx.EvtHandler.__init__(self)
-        self.thread = CmdThread(self)
-        self.cmdStdErr = GStderr(self)
+        self.thread = gThread()
         
         
         self.updateProgress = Signal('RenderLayerMgr.updateProgress')
         self.updateProgress = Signal('RenderLayerMgr.updateProgress')
-        self.Bind(EVT_CMD_DONE, self.OnRenderDone)
         
         
         self._startTime = None
         self._startTime = None
          
          
@@ -362,16 +360,21 @@ class RenderLayerMgr(wx.EvtHandler):
         env_cmd['GRASS_RENDER_FILE'] = self.layer.mapfile
         env_cmd['GRASS_RENDER_FILE'] = self.layer.mapfile
         
         
         cmd[1]['quiet'] = True # be quiet
         cmd[1]['quiet'] = True # be quiet
-        cmd_tuple = cmdtuple_to_list(cmd)
-        
+        # for k, v in env_cmd.iteritems():
+        #     if 'GRASS_' in k:
+        #         print 'export %s=%s' % (k, v)
         self._startTime = time.time()
         self._startTime = time.time()
-        self.thread.RunCmd(cmd_tuple, env=env_cmd, stderr=self.cmdStdErr)
+        self.thread.Run(callable=self._render, cmd=cmd, env=env_cmd,
+                        ondone=self.OnRenderDone)
         self.layer.forceRender = False
         self.layer.forceRender = False
-        
+
+    def _render(self, cmd, env):
+        return grass.run_command(cmd[0], env=env, **cmd[1])
+    
     def Abort(self):
     def Abort(self):
         """Abort rendering process"""
         """Abort rendering process"""
         Debug.msg(1, "RenderLayerMgr({}).Abort()".format(self.layer))
         Debug.msg(1, "RenderLayerMgr({}).Abort()".format(self.layer))
-        self.thread.abort(abortall = True)
+        self.thread.Terminate()
 
 
     def IsDownloading(self):
     def IsDownloading(self):
         """Is downloading
         """Is downloading
@@ -385,9 +388,8 @@ class RenderLayerMgr(wx.EvtHandler):
 
 
         Emits updateProcess
         Emits updateProcess
         """
         """
-        stop = time.time()
         Debug.msg(1, "RenderLayerMgr.OnRenderDone(%s): ret=%d time=%f" % \
         Debug.msg(1, "RenderLayerMgr.OnRenderDone(%s): ret=%d time=%f" % \
-                      (self.layer, event.returncode, stop - self._startTime))
+                      (self.layer, event.ret, time.time() - self._startTime))
         self.updateProgress.emit(layer=self.layer)
         self.updateProgress.emit(layer=self.layer)
         
         
 class RenderMapMgr(wx.EvtHandler):
 class RenderMapMgr(wx.EvtHandler):
@@ -399,8 +401,6 @@ class RenderMapMgr(wx.EvtHandler):
         wx.EvtHandler.__init__(self)
         wx.EvtHandler.__init__(self)
 
 
         self.Map = Map
         self.Map = Map
-        self.thread = CmdThread(self)
-        self.cmdStdErr = GStderr(self)
         
         
         self.updateMap = Signal('RenderMapMgr.updateMap')
         self.updateMap = Signal('RenderMapMgr.updateMap')
         self.updateProgress = Signal('RenderMapMgr.updateProgress')
         self.updateProgress = Signal('RenderMapMgr.updateProgress')