In article <qota9nhu6ag....@ruuvi.it.helsinki.fi>, Jussi Piitulainen <jpiit...@ling.helsinki.fi> wrote:
> A light-weighter way is to have each task end by assigning the next > task and returning, instead of calling the next task directly. When a > task returns, a driver loop will call the assigned task, which again > does a bounded amount of work, assigns the next task, and returns. > Tasks can even pass parameters in the same way. Yup. I've used this pattern for building state machines. Each state is a function which returns the next state (or, sometimes, a (next_state, output) tuple). The top level loop ends up looking very much like yours: state = start while state != end: state, output = state(get_next_input()) print output > > Like so, Dr. Fred keeps adding to a pile as long as there is a pile, > and Mr. Jim keeps taking from it as long as it's there to take from: > > from random import choice > > def fred(): > global fun, arg > print('Fred adds 1') > fun, arg = choice((fred, jim)), arg + 1 > > def jim(): > global fun, arg > print('Jim takes 1') > fun, arg = choice((fred, jim)), arg - 1 > > if __name__ == '__main__': > fun, arg = choice((fred, jim)), 3 > while arg: > print('Pile is', arg, end = '\t') > fun() > else: > print('Pile is gone') -- http://mail.python.org/mailman/listinfo/python-list