Время Python для запуска определенных событий
В Python я хотел бы запустить функцию, вызывающую действие по умолчанию в течение 20 секунд. Однако в течение этих 20 секунд есть 5 определенных моментов времени, когда должна быть запущена другая функция. Чтобы упростить мой код, я заменил функции "действия" простыми командами печати.
Вот что у меня есть. Вывод выглядит нормально, он длится 10 секунд и печатает время и состояние / действие по умолчанию. Но триггерное действие отсутствует! Есть ли лучший / правильный способ сделать это?
import random
import time
import numpy as np
import itertools
def uniform_min_range(a, b, n, min_dist):
while True:
atimes = np.random.uniform(a, b, size=n)
np.sort(atimes)
if np.all(np.diff(atimes) >= min_dist):
return atimes
def timings():
global times
times = uniform_min_range(0, 20, 5, 1.0)
print 'beep times: ', times
def defaultAction():
global start
print 'wobble'
def triggeredAction():
global start
print 'actionnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn'
def main():
global times
timings()
print 'beep times: ', times
start = time.time()
t_end = time.time() + 20 #### end after 20 seconds
while time.time() < t_end: #### for 20 sec/ until end reached
print str(time.time()-start)
if (time.time()-start) == times[0] or (time.time()-start) == times[1] or (time.time()-start) == times[2] or (time.time()-start) == times[3]:
triggeredAction()
elif (time.time()-start) != times[0] or (time.time()-start) != times[1] or (time.time()-start) != times[2] or (time.time()-start) != times[3]:
defaultAction()
print "END"
main()
1 ответ
time.time()
возвращает второе после эпохи число с плавающей точкой, например:
>>> import time
>>> time.time()
1465572505.891256
Если ваше сравнение:
time.time()-start) == times[0]
в time.time()
не правильно вплоть до микросекунды (это зависит от системы), то ==
не будет правдой, и вы никогда не получите свой triggeredAction()
,
Делайте вещи вторым, если это работает для вас, используйте: int(time.time())
и сделать то же самое для вашего uniform_min_range
возвращаемые значения - при условии правильного разрешения в секунду. В противном случае вам нужно будет ввести диапазон (+ или - 1 с) для вашей проверки сработавшего действия.