1   
 2   
 3  import Queue 
 4  import sys 
 5  import threading 
 6  import nuke 
 7   
 8   
10    """ Helper class to run python commands in a separate thread. """ 
11   
13      """ constructor """ 
14      self.__pyThread = threading.Thread(target = self.__pyThreadMain) 
15      self.__pyThread.setDaemon(True) 
16      self.__working = False 
17      self.__work = Queue.Queue() 
 18   
19   
20 -  def run(self, call, args = (), kwargs = {}): 
 21      """ Runs the specified call in a separate thread. """ 
22      self.__work.put((call, args, kwargs), True) 
 23   
24   
26      """ Start the thread associated with this object """ 
27      if not self.__pyThread.isAlive(): 
28        self.__working = True 
29        self.__pyThread.start() 
 30   
31   
33      """ Terminated the thread associated with this object """ 
34      if self.__working: 
35        self.__working = False 
36        self.__pyThread.join() 
37        while not self.__work.empty(): 
38          self.__work.get_nowait() 
 39   
40   
41 -  def __pyThreadMain(self): 
 42      """ Thread entry function """ 
43      while self.__working: 
44        try: 
45          func, args, kwargs = self.__work.get(True) 
46          func(*args, **kwargs) 
47        except Exception: 
48          sys.excepthook(*sys.exc_info()) 
  49