Changeset 722
- Timestamp:
- 10/14/03 14:45:38 (5 years ago)
- Files:
-
- trunk/RBFoundation/RBFoundation/ThreadTools.py (modified) (1 diff)
Legend:
- Unmodified
- Added
- Removed
- Modified
- Copied
- Moved
trunk/RBFoundation/RBFoundation/ThreadTools.py
r642 r722 33 33 class DispatchThread(threading.Thread): 34 34 def __init__(self): 35 self.workqueue = Queue.Queue(0) 36 self.thread = threading.Thread(None, self._OnThreadExecute) 37 self.thread.setDaemon(True) 35 threading.Thread.__init__(self) 36 self.workqueue = self._QueueFactory() 37 self.setDaemon(True) 38 self.start() 38 39 39 40 def CallLater(self, callable, *args, **kw): 40 self.workqueue.put((callable, args, kw), True) 41 if not self.thread.isAlive(): 42 self.thread.start() 41 self._AddWork((callable, args, kw)) 43 42 44 def _OnThreadExecute(self):43 def run(self): 45 44 self._running = True 46 45 while self._running: 47 callable, args, kw = self. workqueue.get(True)46 callable, args, kw = self._GetWork() 48 47 if callable is not None: 49 48 callable(*args, **kw) 50 49 else: break 50 def stop(self): 51 self._running = False 51 52 53 def _AddWork(self, item): 54 return self.workqueue.put(item, True) 55 def _GetWork(self): 56 return self.workqueue.get(True) 57 def _QueueFactory(self): 58 return Queue.Queue(None) 59 60 #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 61 62 class DictQueue(Queue.Queue): 63 def _init(self, maxsize=None): 64 self.maxsize = maxsize 65 self.queue = dict() 66 67 def _put(self, item): 68 self.queue[item[0]] = item[1] 69 70 def _get(self): 71 return self.queue.popitem() 72 73 class DictDispatchThread(DispatchThread): 74 def CallLater(self, dispatchkey, callable, *args, **kw): 75 self._AddWork((dispatchkey, (callable, args, kw))) 76 77 def _QueueFactory(self): 78 return DictQueue() 79 80 def _GetWork(self): 81 return self.workqueue.get(True)[-1] 82
