  
          if self.tk_vars["runningtask"].get():
              self.task.terminate()
          else:
              self.command = command
              args = self.prepare(category)
              self.task.execute_script(command, args)
          self.tk_vars["action"].set(None)
 
</s> remove         if self.command == "train":
 </s> add         if command == "train": </s> remove                 self.process.send_signal(signal.SIGINT)
 </s> add                 process.send_signal(signal.SIGINT) </s> remove         elif not self.thread.complete.is_set():
 </s> add             return True
        if not self.thread.complete.is_set():
            if self.task.command == "train":
                self.tk_vars["istraining"].set(False)
  
          if self.tk_vars["runningtask"].get():
            if self.task.command == "train":
                self.tk_vars["istraining"].set(False)
              self.task.terminate()
          else:
              self.command = command
              args = self.prepare(category)
              self.task.execute_script(command, args)
          self.tk_vars["action"].set(None)
keep add keep keep keep keep keep keep
 GUI responsiveness and feature updates

- Add error handling to LongRunningTask
- Analysis: Fix timestats bug for missing session data
- Training: Update training graph inside LongRunningTask
- Training: Smoothing Amount Slider geometry fix
- Training: Auto update Analysis tab on training start and save interval
- Scripts: Keep control of the UI when terminating by terminating using LongRunningTask 
lib/gui/wrapper.py