def func1(iterable):
    for x in iterable:
        print('func1 consuming {}'.format(x))

def func2(iterable):
    for x in iterable:
        print('func2 consuming {}'.format(x))
gen1, gen2 = tee(generator(), 2)
thread1 = threading.Thread(target=func1, args=(gen1,))
thread1.start()
thread2 = threading.Thread(target=func2, args=(gen2,))
thread2.start()
thread1.join()
thread2.join()
Two functions, One generator