<html><body><div style="color:#000; background-color:#fff; font-family:times new roman, new york, times, serif;font-size:12pt"><div><span>Hi Bin:</span></div><div style="color: rgb(0, 0, 0); font-size: 16px; font-family: 'times new roman', 'new york', times, serif; background-color: transparent; font-style: normal;"><span><br></span></div><div style="font-family: 'times new roman', 'new york', times, serif; font-size: 12pt;"><div style="font-family: 'times new roman', 'new york', times, serif; font-size: 12pt;"><div dir="ltr"><hr size="1">  <font size="2" face="Arial"> <b><span style="font-weight:bold;">From:</span></b> Bin Huang <bin.arthur@gmail.com><br> <b><span style="font-weight: bold;">To:</span></b> Andrew Francis <andrewfr_ice@yahoo.com> <br><b><span style="font-weight: bold;">Cc:</span></b> "stackless@stackless.com" <stackless@stackless.com> <br> <b><span style="font-weight: bold;">Sent:</span></b> Friday, June 14, 2013 4:29
 PM<br> <b><span style="font-weight: bold;">Subject:</span></b> More questions on stackless.run()<br> </font> </div> <div class="y_msg_container"><br></div><div class="y_msg_container"><span style="font-size: 12pt;">>As you suggested, I found thinking of stackless.run() being in an infinite loop was helpful. So I >went on to test stackless.run() in a few different scenarios. This time, I got confused by different >outputs in different scenarios.</span><br><div id="yiv778351549"><br></div><div id="yiv778351549">Typically you execute stackless.run() once. A common structure for a Stackless Python</div><div id="yiv778351549">programme is:</div><div id="yiv778351549"><br></div><div id="yiv778351549">your-programme-goes-here</div><div id="yiv778351549">stackless.run()</div><div id="yiv778351549"><br></div><div id="yiv778351549">I ought to look at how stackless.run() is implemented but think of stackless.run conceptually</div><div
 id="yiv778351549">as a pump that schedules tasklets as long as there are runnable tasklets.  Again, conceptually</div><div id="yiv778351549">stackless.run() is akin to:</div><div id="yiv778351549"><br></div><div id="yiv778351549">while stackless.getruncount() > 1:</div><div id="yiv778351549">      stackless.schedule()</div><div id="yiv778351549"><br></div><div id="yiv778351549">As long as there is more than one tasklet (the main), the next tasklet in the runnable queue will be </div><div id="yiv778351549">scheduled.</div><div id="yiv778351549"><br></div><div id="yiv778351549">...</div><div id="yiv778351549"><br></div><div id="yiv778351549"><div>>Third, if I don't even call stackless.run(), the stackless runtime is still able to schedule some tasklets >to run (e.g., code #2). Why is this?</div><div><br></div><div>Good question. I don't have a good answer (without looking at the code) but a number of
 operations</div><div>will engage the scheduler and get the ball rolling. The scheduler in non-preemptive mode is a passive entity: it has to be called to do things.</div><div><br></div><div>Cheers,</div><div>Andrew</div></div></div> </div> </div>  </div></body></html>