<div dir="ltr"><div><div>On Thu, Oct 18, 2012 at 9:49 AM, Greg Ewing <span dir="ltr"><<a href="mailto:greg.ewing@canterbury.ac.nz" target="_blank">greg.ewing@canterbury.ac.nz</a>></span> wrote:<br><div class="gmail_quote">




<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">I've converted my tutorial on generator-based tasks<br>
for Python 3.3, tidied it up a bit and posted it here:<br>
<br>
<a href="http://www.cosc.canterbury.ac.nz/greg.ewing/python/tasks/" target="_blank">http://www.cosc.canterbury.ac.<u></u>nz/greg.ewing/python/tasks/</a><div><div><br>
<br>
-- <br>
Greg<br>
<br>
</div></div><div><br></div></blockquote><div><br></div>Thanks for writing this. I've used threads all my life so this coroutine/yield-from paradigm is hard for me to grok even after reading this quite a few times.<div>


<br></div><div>I can't wrap my head around the block and unblock functions.<div><br></div><div>block() removes the current task from the ready_list, but is the current task guaranteed to be my task? If so, then I'd never run again after the yield in acquire(), that is unless a gracious other player unblocks me.</div>


<div><br></div><div>block() in acquire() is the philosopher or fork avoiding the scheduler?</div><div>yield in acquire() is the philosopher relinquishing control or the fork?</div><div><br></div><div>I think I finally figured it out after staring at it for long enough. I'm not sure it makes sense for scheduler functions to store waiting tasks in a queue owned by the app and invisible from the scheduler. This can cause <b>invisible deadlocks</b> such as:</div>


<div><br></div><div><div>schedule(philosopher("Socrates", 8, 3, 1, forks[0], forks[2]), "Socrates")</div><div>schedule(philosopher("Euclid", 5, 1, 4, forks[2], forks[0]), "Euclid")</div>


</div><div><br></div><div>Which may be really hard to debug.</div></div><div><br></div><div>Is there a coroutine strategy for tackling these challenges? Or will I just get better at overcoming them with practice?</div><div>

<br></div><div>--Yuval</div></div><br></div></div></div>