def master(): gens = [None, None] gens[0] = funA(gens) gens[1] = funB(gens) gen = gens[0] # start with A try: while True: gen = gen.next() except StopIteration: None def funA(gens): print "In A, right before first resume B." yield gens[1] print "In A, right before second resume B." yield gens[1] print "In A, right before third resume B." yield gens[1] def funB(gens): print "In B, right before first resume A." yield gens[0] print "In B, right before second resume A." yield gens[0] print "In B, right at the end."