events = [1,2,3] * 2

def consumeEven():
  event = yield
  print "consumeEven", event

def consumeOdd():
  event = yield
  print "consumeOdd", event

def consumeEvents():
  while True:
    event = yield
    print "consumeEvents", event
    if event % 2 == 0:
      i = consumeEven() 
      try:
        i.next()
        while True:
	  e = yield
	  i.send(e)
      except StopIteration:
        pass
    else:
      i = consumeOdd()
      try:
        i.next()
        while True:
	  e = yield
	  i.send(e)
      except StopIteration:
        pass

consumer = consumeEvents()
consumer.next() #need to 'prime' the iterator
for event in events:
  consumer.send(event)
  
#output is:
#consumeEvents 1
#consumeOdd 2
#consumeEvents 3
#consumeOdd 1
#consumeEvents 2
#consumeEven 3
