[Tutor] Did anyone get the Kamaelia "Conversing" chapter 5 to work?

Kent Johnson kent37 at tds.net
Fri Oct 7 01:31:10 CEST 2005


R. Alan Monroe wrote:
> I was working through their tutorial:
> 
> 
>>    * http://kamaelia.sourceforge.net/MiniAxon/
> 
> 
> Chapter 5 claims the output should be:
> Hello World 2
> Hello World 3
> ...
> Hello World 97
> Hello World 98
> 
> But mine outputs only:
> Hello World 2
> (no further output)
> 
> I can see in Pythonwin's debugger that p.boxes['outbox'] fills up with
> the hundred or so messages intended for display, but they never get
> displayed. I suspect an indentation problem, but I can't spot it, even
> stepping through in the debugger.

I made exactly the same mistake! You have to put an infinite loop in postman.main(). It's in the directions but I guess it's easy to miss.

Kent

> 
> Alan
> 
> 
> ------------------------------------------------------------------------
> 
> #=============================================
> class microprocess(object):
>     
>     def __init__(self):
>         super(microprocess, self).__init__()
>     
>     def main(self):
>         yield 1
> 
> #=============================================
> class scheduler(microprocess):
>     
>     def __init__(self):
>         super(scheduler, self).__init__()
>         self.active = []
>         self.newqueue = []
>         
>     def main(self):
>         for x in xrange(100):
>             for current in self.active:
>                 yield 1
>                 try:
>                     result = current.next()
>                     if result is not -1:
>                         self.newqueue.append(current)
>                 except StopIteration:
>                     pass
>             self.active = self.newqueue
>             self.newqueue = []
>     
>     def activateMicroprocess(self, someprocess):
>         microthread = someprocess.main()
>         self.newqueue.append(microthread)
> 
> #=============================================
> class postman(microprocess):
>     
>     def __init__(self, source, sourcebox, sink, sinkbox):
>         super(postman, self).__init__()
>         self.source = source
>         self.sourcebox = sourcebox
>         self.sink = sink
>         self.sinkbox = sinkbox
>         
>     def main(self):
>         yield 1
>         if self.source.dataReady(self.sourcebox):
>             postdata = self.source.recv(self.sourcebox)
>             self.sink.send(postdata, self.sinkbox)
> 
> #=============================================
> class component(microprocess):
>     
>     def __init__(self):
>         super(component, self).__init__()
>         self.boxes = { 'inbox': [], 'outbox': [] }
> 
>     def send(self, value, boxname):
>         self.boxes[boxname].append(value)
>         
>     def recv(self, boxname):
>         return self.boxes[boxname].pop(0)
> 
>     def dataReady(self, boxname):
>         return len( self.boxes[boxname] )
> 
> #=============================================
> class Producer(component):
>     
>     def __init__(self, message):
>         super(Producer, self).__init__()
>         self.message = message
>     
>     def main(self):
>         while 1:
>             yield 1
>             self.send(self.message, "outbox")
> 
> #=============================================
> class Consumer(component):
> 
>     #~ def __init__(self, tag):
>         #~ super(Consumer, self).__init__()
>         
>     def main(self):
>         count = 0
>         while 1:
>             yield 1
>             count += 1
>             if self.dataReady("inbox"):
>                 data = self.recv("inbox")
>                 print data, count
> 
> 
> p = Producer("Hello World")
> c = Consumer()
> postie = postman(p, "outbox", c, "inbox")
> 
> myscheduler = scheduler()
> myscheduler.activateMicroprocess(p)
> myscheduler.activateMicroprocess(c)
> myscheduler.activateMicroprocess(postie)
> 
> for _ in myscheduler.main():
>     pass
> 
> 
> ------------------------------------------------------------------------
> 
> _______________________________________________
> Tutor maillist  -  Tutor at python.org
> http://mail.python.org/mailman/listinfo/tutor



More information about the Tutor mailing list