[Python-es] Control de tiempo entre conmutaciones de 0 y 1

Carlos Zuniga carlos.zun en gmail.com
Mar Mar 21 16:07:52 EDT 2017


2017-03-20 23:05 GMT-05:00 Rolando Paz <flxpaz en gmail.com>:
> Hola a todos de nuevo...
>
> Ahora regreso con un pequeño código:
>
> import time
>
> start_time = time.time()
> #tiempo total en segundos, como ejemplo 10.
> tiempo_total = 10
> #numero de conmutaciones generadas, como ejemplo 4.
> conmutaciones = 4
> for offset in range(tiempo_total):
>     while (time.time() - start_time) < offset:
>         time.sleep(0.01)
>         #lo siguiente realiza una conmutacion entre 0 y 1.
>         count = 0
>         for i in range(conmutaciones):
>             count = (count + 1) % 2
>              print count
>
> Lo que hace este código es conmutar entre 0 y 1, tantas veces como se defina
> en "conmutaciones", durante el tiempo establecido en "tiempo_total".
>
> La salida es la siguiente.
>
> 0
> 1
> 0
> 1
>
> Estoy tratando de entender cómo usar este código para controlar los tiempos
> que se definen en la imagen adjunta, es decir:
>
> T1 = tiempo durante el cual la conmutacion es 1
> T0 = tiempo durante el cual la conmutacion es 0
> Tiempo Total = tiempo total de las conmutaciones
>
> Agradecería cualquier comentario sobre como poder controlar los tiempos
> anteriores.
>

Tu intención es que espere un tiempo tras cada print de 0 o 1? o que
imprima 0/1 4 veces y luego esperar?

    import time
    from itertools import cycle
    conmutador = cycle((0,1))

    tiempo_total = 10
    conmutaciones = 4

    start = time.time()
    end = start + tiempo_total
    time_per_pulse = tiempo_total / conmutaciones
    while end > time.time():
        pulse_start = time.time()
        print(next(conmutador))
        pulse_end = time.time()
        time.sleep(time_per_pulse - (pulse_end - pulse_start))


Ahora, time.sleep no es exacto, el tiempo va a ser normalmente mayor
al que especificas, depende del sistema. También hay
threading.Event.wait que puede ser más exacto.


Saludos


Más información sobre la lista de distribución Python-es