我有一个调度函数和一个调度程序,其中包含按时间排序的未来事件队列。我正在使用UNIX时间戳和常规time.time()
。调度程序的一个片段大致相当于:
# select the nearest event (eventfunc at eventime)
sleeptime = eventtime - time.time()
# if the sleep gets interrupted,
# the whole block will be restarted
interruptible_sleep(sleeptime)
eventfunc()
可以根据延迟计算eventtime
:
eventtime = time.time() + delay_seconds
或基于确切的日期和时间,例如:
eventtime = datetime(year,month,day,hour,min).timestamp()
现在我们在Python中有单调的时间。我正在考虑修改调度程序以使用单调时间。调度员应该使用他们所说的单调时间。
延误没问题:
sleeptime = eventtime - time.monotonic()
其中:
eventtime = time.monotonic() + delay_seconds
但是在确切的时间我认为最好的方法是保持代码不变。这是对的吗?
如果是,我需要两个事件队列,一个基于单调时间,一个基于常规时间。我不太喜欢这个想法。
答案 0 :(得分:1)
正如我在评论中所说,你的代码重复了sched
standard module的功能 - 所以你也可以使用解决这个问题作为迁移到它的一个方便的借口。
那就是说,
time.monotonic()
适用于需要在它们之间设置间隔而不管任何事情的情况如果您希望两者,那么您需要两个调度程序,或者需要两种时间戳的任务。
在后一种情况下,调度程序需要将一种类型转换为另一种类型(每次计算等待多少/是否运行下一个任务) - time
没有提供任何方法。