from datetime import datetime, timedelta

def get_interval (inicio, fim, intervalo):
    
    """ 
    Retorna a lista de horários entre `inicio` e `fim`, inclusive, com um intervalo definido por `intervalo`.
    
    @param inicio    iterable Lista de três valores no formato (hora, minutos, segundos)
    @param fim       iterable Lista de três valores no formato (hora, minutos, segundos)
    @param intervalo iterable Lista de três valores no formato (hora, minutos, segundos)
    @return generator
    """
    
    inicio = datetime(2017, 1, 1, *inicio)
    fim = datetime(2017, 1, 1, *fim)
    
    iHoras, iMinutos, iSegundos = intervalo
    
    intervalo = timedelta(hours=iHoras, minutes=iMinutos, seconds=iSegundos)
    
    while inicio <= fim:
        yield inicio.time()
        inicio += intervalo

hrInicial = (8, 0, 0)
hrFinal = (12, 0, 0)
intervalo = (0, 30, 0)

for hora in get_interval(hrInicial, hrFinal, intervalo):
    print(hora)