def __start_updater(self, daemon=True, timeout=0):
"""Start the updater thread. **used internally**"""
import Queue
def task_exec(emit, data):
if hasattr(emit,'send'):
res = emit.send(data)
res and P.write(res)
else: emit(data)
def task_get_timeout(P, timeout):
try:
emit,data = P.taskQueue.get(block=True, timeout=timeout)
except Queue.Empty:
_,_,tb = sys.exc_info()
P.exceptionQueue.put(StopIteration,StopIteration(),tb)
return ()
return emit,data
def task_get_notimeout(P, timeout):
return P.taskQueue.get(block=True)
task_get = task_get_timeout if timeout > 0 else task_get_notimeout
def update(P, timeout):
P.eventWorking.wait()
while P.eventWorking.is_set():
res = task_get(P, timeout)
if not res: continue
emit,data = res
try:
task_exec(emit,data)
except StopIteration:
P.eventWorking.clear()
except:
P.exceptionQueue.put(sys.exc_info())
finally:
P.taskQueue.task_done()
continue
return
self.__updater = updater = threading.Thread(target=update, name="thread-%x.update"% self.id, args=(self,timeout))
updater.daemon = daemon
updater.start()
return updater
评论列表
文章目录