<br><br><div class="gmail_quote">On Sat, Jan 2, 2010 at 11:35 PM, TOUMAN <span dir="ltr">&lt;<a href="mailto:touman@btinternet.com">touman@btinternet.com</a>&gt;</span> wrote:<br><blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">
<table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td style="font-family: inherit; font-style: inherit; font-variant: inherit; font-weight: inherit; font-size: inherit; line-height: inherit; font-size-adjust: inherit; font-stretch: inherit;" valign="top">
Hi I am a newbi to stakless. I have read the documentaion specially the piece by grant olson.<br><br>I want to create three tasks which are continually waiting for messages and don not die until they recieve the &quot;exit&quot; message. I have written the code below:<br>
<br>import os, sys<br>import stackless<br>import math<br><br>global _unit_A, _unit_B, _unit_C     <br>_unit_A = stackless.channel()<br>_unit_B = stackless.channel()<br>_unit_C = stackless.channel()<br><br>class units:<br>
  def __init__(self,channel,name):<br>    <a href="http://self.ch" target="_blank">self.ch</a> = channel<br>    <a href="http://self.name" target="_blank">self.name</a> = name<br>    stackless.tasklet(self.process)()<br>        <br>
  def process(self):<br>    print <a href="http://self.name" target="_blank">self.name</a>,&quot;Unit running&quot;<br>    while True:   
 <br>      msg = self.ch.receive()<br>      if msg == &quot;exit&quot;:<br>        return<br>      print <a href="http://self.name" target="_blank">self.name</a>,&quot;:&quot;,msg<br>      stackless.schedule()<br>          <br>
def testit():<br>  print &quot;Testing the parallel tasks&quot;<br>  units(_unit_A,&quot;unit A&quot;)<br>  units(_unit_B,&quot;unit B&quot;)  <br>  units(_unit_C,&quot;unit C&quot;)  <br>  msg = &quot;Msg from unit A who says hello&quot;<br>
  _unit_B.send(msg)<br>  stackless.run()  <br>    <br><br>testit()<br><br><br>But when I run it, it runs through all tasks once and the program finishes and I get this.<br><br>c:\&gt;<br>Testing the parallel tasks<br>unit A Unit running<br>
unit B Unit running<br>unit B : Msg from unit A who says hello<br>unit C Unit running<br>c:\&gt;<br><br> I am sure it must be
 something simple, but cant figure it out. Does anybody know what is happening here and what I am doing wrong?<br><br>cheers<br>tomcat<br></td></tr></tbody></table><br>_______________________________________________<br>
Stackless mailing list<br>
<a href="mailto:Stackless@stackless.com">Stackless@stackless.com</a><br>
<a href="http://www.stackless.com/mailman/listinfo/stackless" target="_blank">http://www.stackless.com/mailman/listinfo/stackless</a><br></blockquote></div><br>Hi tomcat,<br><br>I am new to stackless myself, but in my experience, if all running tasklets are waiting on channels then stackless.run() returns.<br>
<br>In your example, unitA, unitB and unitC are consumers waiting to consume on the A,B,C channels. However, there are no producers for the A,B,C channels (except for the main thread that sent one message to start with). When the scheduler runs tasklets A, B, and C it ends up waiting on all three channels infinitely. I suspect that stackless.run() returns so that you can handle the dead-lock.<br>
<br>In practice, I would imagine that you would want to have a producer tasklet that sends the exit commands based on some condition (keyboard press, network signal etc). In this case, the scheduler would have something to schedule while the other tasklets waited on channel A, B and channel C.<br>
<br>Jeremy.<br>