[Stackless] Dining Philosophers with Join Patterns and Stackless.py

Andrew Francis andrewfr_ice at yahoo.com
Mon Aug 22 18:31:28 CEST 2011

Hi Folks:

As I stated in a previous post, I have written a new version of stackless.py incorporating a concept called join patterns. Join patterns build up on the work I have done with stackless.select(). I am still experimenting with the API amongst other things. So things look rough. When I get stuff stabilized, I'll post a new version of stackless.py in the stackless repository.

With the exception of a hiccup of a recursion limit problem (there is a weird interaction with Twisted), here is the core of the dining philosophers that roughly mimics the example in the paper "Scalable Join Patterns." I left out the Twisted parts.

def thinker(name, thinking, left, right):
    global pattern
    print "Philosopher %s left=%s right=%s" % (name, left.label, right.label)
    utensils = stackless.joinPattern([stackless.JoinReceiveChanop(left.receiveCase()), \

    while True:
       waitTime = random.randint(thinking[0], thinking[1])
       print name, "thinking for ", waitTime, "time units"
       print name, "ready to eat"
       result = stackless.select([utensils])
       for p in result:
           print p.value, " relenquished chopstick ", p.channel.label


       print name, " finished eating"
       release(left, name)
       release(right, name)

Since I didn't build buffered channels into the new stackless.py, I have to do asynchrony in the following way:

def release(aChannel, name):
    def __release():

I would appreciate feedback.

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://www.stackless.com/pipermail/stackless/attachments/20110822/be69f6cd/attachment.html>

More information about the Stackless mailing list