在python中使用sleep创建计时器。如何计算时间?

在python中使用sleep创建计时器。如何计算时间?,python,python-3.x,time,timer,Python,Python 3.x,Time,Timer,我正在尝试制作一个简单的计时器,它每秒钟打印剩余的时间 for k in range(100): print(100-k) t.sleep(1) #output #100 #99 #98 #... #1 但是,这将花费略长于100秒的时间,因为在使用print()时会增加延迟。在很长一段时间内,这一点是很明显的。有没有办法解释这一点,并准确地显示每秒的时间?我知道我可以睡(100),但这不会让剩下的时间被打印出来 import time start_time=time.time

我正在尝试制作一个简单的计时器,它每秒钟打印剩余的时间

for k in range(100):
    print(100-k)
    t.sleep(1)
#output
#100
#99
#98
#...
#1
但是,这将花费略长于100秒的时间,因为在使用print()时会增加延迟。在很长一段时间内,这一点是很明显的。有没有办法解释这一点,并准确地显示每秒的时间?我知道我可以睡(100),但这不会让剩下的时间被打印出来

import time
start_time=time.time()
for k in range(25):
    print(25-k)
    time.sleep(1)
print("it took  "+str(float(time.time()-start_time)*1000)+" Milliseconds")
打印输出为:
它花费了26412.75382041931毫秒

未打印的输出:
花费了25053.03502082247毫秒

它应该只有25000毫秒,但事实并非如此

打印需要时间,即使阅读代码也需要时间
关键是不要期望精确的计时。sleep()

您可以使用
time.time()
来测量经过的时间

import time
start_time = time.time()

for k in range(100):
    # k seconds SHOULD be elapsed at this point
    print(100 - k)
    slept_time = time.time() - start_time
    time.sleep(1 + k-slept_time)

使用
time.sleep
永远不会为您提供计时器的准确时间,因为它所花费的时间是1秒睡眠时间+打印时间,您可以使用
threading.timer
获得更准确的结果:

导入线程,时间
开始时间=time.time()
def计数循环(计数器):

如果计数器工作正常,
sleep
也不是完全准确的,因此每次
sleep
都会比秒多一点或少一点。您查看过时间吗?性能计数器?这只测量每个间隔所需的时间,但不会缩短到一秒长。不应该缩短它,这是为了表明time.sleep()不能准确工作!
import threading, time

start_time=time.time()
def count_loop(counter):
  if counter <= 0: 
    print("it took  "+str(float(time.time()-start_time)*1000)+" Milliseconds")
    return

  threading.Timer(1.0, count_loop, args=[counter-1]).start()
  print(counter)      

count_loop(100)