这是我在stackoverflow.com上的第一个问题,所以请对我宽容:)我有一个问题,我怎么理论上创建一个秒表程序。它对我来说无关紧要。这在理论上可以吗?
a = 0
While 1 == 1:
Print(a)
Sleep(1s)
a = a+1
这对我来说应该没问题,但是在Python中运行类似的东西时,它并不能准确地打印出来。使用我的“真实”模拟秒表进行测量,有时不到1秒,有时超过1秒。我想知道的是如何理论上只创建一个秒表,我不需要实际的代码。我希望你理解我的问题,等待回复:)
答案 0 :(得分:4)
答案 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()”。