class hackysacker(object): counter = 0 def __init__(self, name, circle): self.name = name self.circle = circle circle.append(self) self.queue = Queue() def incrementCounter(self): hackysacker.counter += 1 if hackysacker.counter >= turns: while self.circle: yield self.circle.pop().queue.put('exit') def messageLoop(self): while True: message = (yield self.queue.get()) if message == 'exit': return debugPrint("%s got hackeysack from %s" % (self.name, message.name)) kickTo = self.circle[random.randint(0, len(self.circle) - 1)] while kickTo is self: kickTo = self.circle[random.randint(0, len(self.circle) - 1)] debugPrint("%s kicking hackeysack to %s" % (self.name, kickTo.name)) for message in self.incrementCounter(): yield message yield kickTo.queue.put(self)
def testQueue(): def printT(): while True: print '+++' yield multitask.sleep(3) def printT2(): while True: print '---' yield multitask.sleep(0.2) def get1(que): while True: print 'xxxx' print(yield que.get()) def put1(que): for x in xrange(0, 10): yield que.put(x) time.sleep(0.5) t = tMultitaskMgr('testQueue') TEST_STOPER(t) t.run() t.add(printT()) t.add(printT2()) que = Queue() t.add(get1(que)) t.add(put1(que)) time.sleep(10) t.stop() print 'over'
class hackysacker(object): counter = 0 def __init__(self, name, circle): self.name = name self.circle = circle circle.append(self) self.queue = Queue() def incrementCounter(self): hackysacker.counter += 1 if hackysacker.counter >= turns: while self.circle: yield self.circle.pop().queue.put("exit") def messageLoop(self): while True: message = (yield self.queue.get()) if message == "exit": return debugPrint("%s got hackeysack from %s" % (self.name, message.name)) kickTo = self.circle[random.randint(0, len(self.circle) - 1)] while kickTo is self: kickTo = self.circle[random.randint(0, len(self.circle) - 1)] debugPrint("%s kicking hackeysack to %s" % (self.name, kickTo.name)) for message in self.incrementCounter(): yield message yield kickTo.queue.put(self)
def runit(hs=5, ts=5, dbg=1): global hackysackers, turns, debug hackysackers = hs turns = ts debug = dbg hackysacker.counter = 0 circle = [] tm = TaskManager() one = hackysacker('1', circle) tm.add(one.messageLoop()) for i in xrange(2, hackysackers + 1): tm.add(hackysacker(str(i), circle).messageLoop()) one.queue = Queue([one]) tm.run()
def __init__(self, name, circle): self.name = name self.circle = circle circle.append(self) self.queue = Queue()