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:
      consumeEven() 
      #here the function concumeEven isn't called, just an iterator is created
    else:
      consumeOdd()

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