【问题标题】:Cross-platform high-accuracy time in pythonpython中的跨平台高精度时间
【发布时间】:2012-03-10 11:19:50
【问题描述】:

我正在编写一个可以在多个平台上运行的游戏。我需要在所有平台上都具有良好的时间准确性。

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

阅读文档后,time.time 在 Linux 上的显示效果更好,而 time.clock 在 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 时间感觉有点奇怪。

问题:您更愿意使用什么,为什么?

【问题讨论】:

    标签: python time cross-platform


    【解决方案1】:

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

    只需调用pygame.time.get_ticks()- 它将返回自调用pygame.init() 以来的微秒数

    除了面向多媒体的程序之外,让其他程序从 pygame 调用 SDL 函数来处理声音警告甚至键盘读取等问题并不少见 - 使用它应该没有问题。

    【讨论】:

      【解决方案2】:

      我一直用这个,从来没有遇到任何问题:

      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,因为您提到的原因,以及精度的提高(如果有的话)可能甚至不明显。

      【讨论】:

        【解决方案3】:

        为了获得最佳的已用时间度量(自 Python 3.3 起),请使用 time.perf_counter

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2010-12-28
          • 1970-01-01
          相关资源
          最近更新 更多