为了账号安全,请及时绑定邮箱和手机立即绑定

在 Python 中测量短时间间隔的最安全和最可靠的方法?

在 Python 中测量短时间间隔的最安全和最可靠的方法?

桃花长相依 2022-05-11 15:24:08
我对日期时间算术的了解越多,我就越头疼。时间有很多种:民用时间世界标准时间泰UNIX 时间系统时间线程时间CPU时间然后时钟可以跑得更快或更慢,或者向后或向前跳跃,因为夏令时跨时区移动闰秒NTP同步广义相对论而如何处理这些又取决于:操作系统硬件编程语言所以请有人告诉我,对于我的具体用例,测量短间隔的最安全和最可靠的方法?这是我正在做的事情:我正在用Python (3.7.x) 制作游戏,我需要跟踪某些事件发生后的时间。例如,玩家按住按钮多长时间,或者敌人发现玩家多长时间,或者关卡加载多长时间。时间刻度应该精确到毫秒(纳秒是多余的)。以下是我想确保避免的情况:你在深夜玩游戏。在您所在的时区,那天晚上,DST 凌晨 2 点的时钟向前移动了一个小时,因此分钟数为:1:58、1:59、2:00、3:01、3:02。游戏中的每个与时间相关的变量突然都增加了一个小时——它认为你一直按住那个按钮 1 小时 2 秒,而不是仅仅 2 秒。灾难接踵而至。相同,但 IERS 决定在当天的某个时间插入或减去闰秒。您播放过渡,所有时间变量都会增加或减少额外的秒数。灾难接踵而至。您在火车或飞机上玩游戏,当您越过时区边界和/或国际日期变更线时,灾难随之而来。游戏在某些硬件和操作系统上的上述情况下正常运行,但在其他情况下不能正常运行。即它在Linux 上中断但在Window 上不中断,反之亦然。而且我不能真正为这些编写测试,因为有问题的事件很少出现。我需要在第一时间把它做好。那么,我需要使用什么与时间相关的功能呢?我知道有普通的 old time.time(),但也有一系列令人眼花缭乱的其他选择,比如time.clock()time.perf_counter()time.process_time()time.monotonic()然后是上述所有内容的纳秒变体。从阅读文档看来,这似乎是time.monotonic()我想要的。但是,如果阅读有关计时的所有细节教会了我什么,那就是这些东西从来都不是它们看起来的样子。曾几何时,我以为我知道什么是“秒”。现在我不太确定。那么,如何确保我的游戏时钟正常工作?
查看完整描述

1 回答

?
胡子哥哥

TA贡献1825条经验 获得超6个赞

time 模块的规范是查找每个模块的详细信息的最佳位置。

在那里,您可以很容易地看到:

  • time.clock()已弃用,应替换为其他功能

  • time.process_time()仅计算您的进程花费的 CPU 时间,因此它不适合测量挂钟时间(这是您所需要的)

  • time.perf_counter()有同样的问题time.process_time()

  • time.time()刚刚好,但如果用户修改当前时间,它会给出错误的时间

  • time.monotonic()- 这似乎是测量时间间隔的最安全的选择 - 请注意,这根本不会给你当前时间,但它会给你两个时间点之间的正确差异

至于纳秒版本,只有在需要纳秒时才应该使用它们。


查看完整回答
反对 回复 2022-05-11
  • 1 回答
  • 0 关注
  • 149 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信