def Run(self, event = None, wait = None, return_queue=None): ''' setup thread event combination ''' self._initialize_waitlist() if wait is not None: return_queue = Queue.Queue() t, queue = get_thread(return_queue) t._verbose = self._run_verbose trigger = t.bind_init(self, self._doJob1) t_list = self.set_background(False)._setup_jobchain(t, [t]) if event is not None: w = event.GetEventObject() else: w = self.get_app() for t in t_list: ifigure.events.SendThreadStartEvent(self, w=w, thread=t) #print 'thread list', t_list send_event(trigger) if wait is not None: t = threading.current_thread() if t.name == 'MainThread': while return_queue.empty(): wx.Yield() else: return_queue.get() if return_queue is not None: return [t.name for t in t_list]
def Run(self, event=None, wait=None, return_queue=None): ''' setup thread event combination ''' self._initialize_waitlist() if wait is not None: return_queue = Queue.Queue() t, queue = get_thread(return_queue) t._verbose = self._run_verbose trigger = t.bind_init(self, self._doJob1) t_list = self.set_background(False)._setup_jobchain(t, [t]) if event is not None: w = event.GetEventObject() else: w = self.get_app() for t in t_list: ifigure.events.SendThreadStartEvent(self, w=w, thread=t) #print 'thread list', t_list send_event(trigger) if wait is not None: t = threading.current_thread() if t.name == 'MainThread': while return_queue.empty(): wx.Yield() else: return_queue.get() if return_queue is not None: return [t.name for t in t_list]
def _doJob1(self, event): # check conditions if event in self._waitlist1: self._waitlist1[event] = True v = True for key in self._waitlist1: v = v and self._waitlist1[key] if not v: return False name = self.get_full_path() if self._run_verbose: print('performing ' + name + '.job1 in ' + c_thread().name) self._status = 'running...' app = wx.GetApp().TopWindow # print 'in do job1', self, threading.current_thread().name wx.CallAfter(app.proj_tree_viewer.update_widget_request2) self.do_run() send_event(name + '.job1_done') # for key in self._waitlist1: self._waitlist1[key] = False return True
def _doJob2(self, event): if event in self._waitlist2: self._waitlist2[event] = True v = True for key in self._waitlist2: v = v and self._waitlist2[key] if not v: return False name = self.get_full_path() if self._run_verbose: print('performing ' + name + '.job2 in ' + c_thread().name) send_event(name + '.job2_done') self._status = '' # print 'in do job2', self, threading.current_thread().name # if self._return_queue is not None: self._return_queue.put('done') app = wx.GetApp().TopWindow wx.CallAfter(app.proj_tree_viewer.update_widget_request2) # for key in self._waitlist2: self._waitlist2[key] = False return True