On Aug 10, 11:11 pm, Joesan <[email protected]> wrote:
> We started working with kamaelia recently at work and we're having
> trouble right now working with threadedcomponents.
...
> The new component gets created just fine but for some reason
> it seems it's main function is never actually called.
At a random guess, does your main method contain a yield ? (This is
the
most common cause of this problem)
Threadedcomponents do NOT have a generator as the main method. (I've
been
wondering if this was a good decision, but it's a little late now)
So, for example this will cause a message to be emitted once per
second:
import time
import Axon
from Kamaelia.Util.Console import ConsoleEchoer
from Kamaelia.Chassis.Pipeline import Pipeline
class Prodder(Axon.Threadedcomponent.threadedcomponent):
def main(self):
while not self.dataReady("control"):
time.sleep(1)
self.send("ping", "outbox")
self.send(self.recv("control"), "signal")
Pipeline( Prodder(), ConsoleEchoer()).run()
However this version will not work because main is a generator not a
regular method.
class Prodder(Axon.Threadedcomponent.threadedcomponent):
def main(self):
while not self.dataReady("control"):
time.sleep(1)
self.send("ping", "outbox")
yield 1
self.send(self.recv("control"), "signal")
> PS - This may not have any effect on anything, but we're not using
> graphline right now and are calling link several times to actually
> link together the mailboxes of various components. Could this keep
> the threadedcomponent's main from starting?
Almost certainly not - I would expect that the issue is that the main
method is a generator. (I've often wondered in recent months whether
this was the right decision)
The reason you'd see this behaviour incidentally is that under the
hood
what actually happens is the main method is used as the new thread
of control inside the thread. If it's a generator method this would
simply create the generator (inside the new thread) and then exit.
Hence confusion.
Hopefully that helps! (If it doesn't please post a fragment showing
the confusing behaviour)
Michael.
--
You received this message because you are subscribed to the Google Groups
"kamaelia" group.
To post to this group, send email to [email protected].
To unsubscribe from this group, send email to
[email protected].
For more options, visit this group at
http://groups.google.com/group/kamaelia?hl=en.