Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- from twisted.internet.task import LoopingCall
- class Manager:
- def __init__(self):
- self._token = {}
- def register(self, tasks):
- if not type(tasks) is list:
- tasks = [tasks]
- for task in tasks:
- self._token[task.Name()] = LoopingCall(task.Job(), self.finalize)
- def start(self, schedule):
- if not type(schedule) is list:
- schedule = [schedule]
- for task, timer in schedule:
- self._token[task.Name()].start(timer, False)
- def finalize(self, task):
- self._token[task.Name()].stop()
- del self._token[task.Name()]
- if not self._token:
- reactor.stop()
- class Countdown(object):
- def __init__(self, name, start):
- self.name = name
- self.counter = start
- def Name(self):
- return self.name
- def Job(self):
- return self.count
- def count(self, finallize=lambda x: None):
- print 'counter %s:' % str(self.name), self.counter, '...'
- if self.counter == 0:
- finallize(self)
- print 'counter %s finished!' % str(self.name)
- else:
- self.counter -= 1
- mng = Manger()
- cntA = Countdown('AAA', 5)
- cntB = Countdown('BB', 10)
- cntC = Countdown('C', 7)
- mng.register(cntA)
- mng.register([cntB, cntC])
- mng.start([(cntA, 1), (cntB, 0.3)])
- mng.start((cntC, 0.5))
- from twisted.internet import reactor
- reactor.run()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement