Package gozerbot :: Module threadloop
[hide private]
[frames] | no frames]

Source Code for Module gozerbot.threadloop

 1  # gozerbot/threadloop.py 
 2  # 
 3  # 
 4   
 5  """ class to implement start/stoppable threads """ 
 6   
 7  __copyright__ = 'this file is in the public domain' 
 8   
 9  from gozerbot.generic import rlog 
10  from gozerbot.thr import start_new_thread 
11  import Queue, time 
12   
13 -class ThreadLoop(object):
14
15 - def __init__(self, name="", queue=None):
16 self.name = name or 'idle' 17 self.stopped = False 18 self.running = False 19 self.outs = [] 20 self.queue = queue or Queue.Queue() 21 self.nowrunning = "none"
22
23 - def _loop(self):
24 rlog(0, self.name, 'starting loop') 25 self.running = True 26 while not self.stopped: 27 try: 28 data = self.queue.get() 29 except Queue.Empty: 30 if self.stopped: 31 return 32 time.sleep(0.1) 33 continue 34 if self.stopped: 35 return 36 if not data: 37 return 38 self.handle(*data) 39 self.running = False 40 rlog(0, self.name, 'stopping loop')
41
42 - def put(self, *data):
43 self.queue.put_nowait(data) 44 self.nowrunning = data[0]
45
46 - def start(self):
47 if not self.running: 48 start_new_thread(self._loop, ())
49
50 - def stop(self):
51 self.stopped = True 52 self.running = False 53 self.queue.put(None)
54
55 - def handle(self):
56 """ overload this """ 57 pass
58