我有一个时间戳列表,表示将来不同时间的事件。我每2分钟运行一次该函数,因为times
的源列表会定期更改。
对于每个唯一的时间事件,我希望函数在事件发生之前以2个间隔运行。有两个问题。
一个是我不知道如何允许我列表中有很多事件,因为有些事件可能会与另一个正在睡觉的函数重叠(在这里汇集一个选项?)
两个是我不知道如何杀死当前的睡眠并每两分钟刷新一次。 Timer
目前尚未覆盖time.sleep
。
任何解决方案或备选方案均值得赞赏。我查看了sched
,但根据他们的文档,线程似乎是首选路由。
import datetime,time, threading
t1 = datetime.datetime.now() + datetime.timedelta(minutes=60)
t2 = datetime.datetime.now() + datetime.timedelta(minutes=62)
t3 = datetime.datetime.now() + datetime.timedelta(days=1)
t4 = datetime.datetime.now() + datetime.timedelta(days=1)
interval_minutes_before_event = [59,20]
times = [t1,t2,t3,t4]
def refresh_every_2_mins(timeslist, intervals):
threading.Timer(120,refresh_every_2_mins)
for event in set(timeslist):
for interval_prior in intervals:
print 'Sleeping for',((event - datetime.timedelta(minutes=interval_prior)) - datetime.datetime.now()).seconds, 'seconds'
time.sleep(((event - datetime.timedelta(minutes=interval_prior)) - datetime.datetime.now()).seconds)
# do something
print 'Two mins up, starting again'
refresh_every_2_mins(times,interval_minutes_before_event)