runtime/Worker.py
changeset 2486 44c2a4e2b84d
parent 2467 fce6ab7ae156
child 2492 7dd551ac2fa0
equal deleted inserted replaced
2485:ef327451d067 2486:44c2a4e2b84d
    63             if _job.success:
    63             if _job.success:
    64                 # result is ignored
    64                 # result is ignored
    65                 pass
    65                 pass
    66             else:
    66             else:
    67                 raise _job.exc_info[0], _job.exc_info[1], _job.exc_info[2]
    67                 raise _job.exc_info[0], _job.exc_info[1], _job.exc_info[2]
       
    68 
    68         while not self._finish:
    69         while not self._finish:
    69             self.todo.wait()
    70             self.todo.wait()
    70             if self.job is not None:
    71             if self.job is not None:
    71                 self.job.do()
    72                 self.job.do()
    72                 self.done.notify()
    73                 self.done.notify()
    73             else:
    74             else:
    74                 self.free.notify()
    75                 break
       
    76 
    75         self.mutex.release()
    77         self.mutex.release()
    76 
    78 
    77     def call(self, *args, **kwargs):
    79     def call(self, *args, **kwargs):
    78         """
    80         """
    79         creates a job, execute it in worker thread, and deliver result.
    81         creates a job, execute it in worker thread, and deliver result.
    95                 self.free.wait()
    97                 self.free.wait()
    96 
    98 
    97             self.job = _job
    99             self.job = _job
    98             self.todo.notify()
   100             self.todo.notify()
    99             self.done.wait()
   101             self.done.wait()
   100             _job = self.job
       
   101             self.job = None
   102             self.job = None
       
   103             self.free.notify()
   102             self.mutex.release()
   104             self.mutex.release()
   103 
   105 
   104         if _job.success:
   106         if _job.success:
   105             return _job.result
   107             return _job.result
   106         else:
   108         else: