我怎样才能在理论上编制秒表?

时间:2012-08-23 19:12:49

标签: python timer sleep stopwatch

这是我在stackoverflow.com上的第一个问题,所以请对我宽容:)我有一个问题,我怎么理论上创建一个秒表程序。它对我来说无关紧要。这在理论上可以吗?

a = 0
While 1 == 1:
    Print(a)
    Sleep(1s)
    a = a+1

这对我来说应该没问题,但是在Python中运行类似的东西时,它并不能准确地打印出来。使用我的“真实”模拟秒表进行测量,有时不到1秒,有时超过1秒。我想知道的是如何理论上只创建一个秒表,我不需要实际的代码。我希望你理解我的问题,等待回复:)

3 个答案:

答案 0 :(得分:4)

检查出来:Stopwatch In Python

所以,回答你的问题:是的,这是可能的。

至于原始代码的准确性:How accurate is python's time.sleep()?

答案 1 :(得分:2)

sleep,不能保证在给定的确切时间内睡觉;它会在大约那段时间内睡觉,但可能会稍微休息一下。当然,如果它每次都朝着同一个方向稍微偏离,那么它将开始积累,你的答案最终会非常消失。

幸运的是,你的电脑配有一个不会漂移很快的时钟,你可以用它作为秒表。而不是每次睡一秒钟,睡眠时间较短(如百分之一秒)。每次醒来,都要测试当前时间。如果从开始时间开始经过一秒钟,请将其打印出来。

答案 2 :(得分:0)

打印以非常规方式发生的原因可能是输出缓冲。如果禁用标准输出的缓冲,它应该按预期工作;见Disable output buffering

运行现有脚本时,可以通过向-u提供python选项来实现这一目标(至少在Linux上)。来自man python

  

-u强制stdin,stdout和stderr完全无缓冲。在重要的系统上,还将stdin,stdout和stderr放入   二进制模式。                 请注意,在xreadlines(),readlines()和file-object迭代器(“for sys.stdin中的行”)中有内部缓冲,   不影响                 通过这个选项。要解决这个问题,你需要在“while 1:”循环中使用“sys.stdin.readline()”。