python中跨平台的高精度时间

时间:2012-03-10 11:19:50

标签: python time cross-platform

我正在编写一款应该在多个平台上运行的游戏。我需要在所有平台上保持良好的准确性。

我对知道一天中的时间不感兴趣,对我来说重要的是两次通话之间经过的时间。

阅读文档后,time.time在Linux上显得更好,在Windows上显示时间更好。 我想写这样的东西:

import os
import time
__all__ = ['hrtime']

platform = os.name
if platform == 'posix':
    hrtime = time.time
elif platform == 'nt':
    hrtime = time.clock
else:
    # 'os2', 'ce', 'java', 'riscos'
    raise ValueError("I have no idea what I'm doing.")

但是其他平台怎么样? MacOS会返回{posix}吗?怎么样的cygwin,是Linux还是Windows?什么是'ce'?我是否应该关心这些平台?

另一种选择可能是使用pygame的SDL时间。这似乎在每个平台上都具有毫秒精度。由于我使用SDL进行渲染,所以我不介意使用它。但是,我现在正在研究网络代码,在我的网络代码中使用SDL时间感觉有点奇怪。

问题:你更喜欢用什么,为什么?

3 个答案:

答案 0 :(得分:1)

我一直使用它,从未遇到过任何问题:

import sys
import time

if sys.platform == "win32":
    # on Windows, the best timer is time.clock()
    timerfunc = time.clock
else:
    # on most other platforms, the best timer is time.time()
    timerfunc = time.time

即使你在其他平台上遇到一些问题,以后也很容易调整代码。

我建议不要使用SDL,因为你提到的原因,以及精度的增加(如果有的话)可能甚至不明显。

答案 1 :(得分:1)

由于你使用的是Pygame,你应该使用pygame的函数来抽象:

只需拨打pygame.time.get_ticks() - 它会返回自调用pygame.init()

以来的微秒

除了面向多媒体的程序之外,使用pygame从声音警告甚至键盘读取等方面调用SDL功能并不是很少见 - 使用它应该没有问题。

答案 2 :(得分:1)

为了最佳度量经过时间(自Python 3.3起),请使用time.perf_counter

  

返回性能计数器的值(以小数秒为单位),即具有最高可用分辨率的时钟,以测量短持续时间。它确实包括睡眠期间经过的时间,并且是系统范围的。返回值的参考点未定义,因此只有连续调用结果之间的差异才有效。