1
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
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
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
49
51 self.stopped = True
52 self.running = False
53 self.queue.put(None)
54
56 """ overload this """
57 pass
58