以单调时间安排精确时间

时间:2017-10-24 06:00:12

标签: python time

我有一个调度函数和一个调度程序,其中包含按时间排序的未来事件队列。我正在使用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

但是在确切的时间我认为最好的方法是保持代码不变。这是对的吗?

如果是,我需要两个事件队列,一个基于单调时间,一个基于常规时间。我不太喜欢这个想法。

1 个答案:

答案 0 :(得分:1)

正如我在评论中所说,你的代码重复了sched standard module的功能 - 所以你也可以使用解决这个问题作为迁移到它的一个方便的借口。

那就是说,

  • 如果系统时间向前或向后跳跃是特定于任务的,那么您应该做什么。
  • time.monotonic()适用于需要在它们之间设置间隔而不管任何事情的情况
  • 所以,如果期望您的解决方案通过迟早运行计划任务来响应时间跳跃,那么根据新的系统时间,您没有理由使用单调时间。

如果您希望两者,那么您需要两个调度程序,或者需要两种时间戳的任务。

在后一种情况下,调度程序需要将一种类型转换为另一种类型(每次计算等待多少/是否运行下一个任务) - time没有提供任何方法。