是否可以在Python 2.5中以timeimal形式接收time.time()的输出?
如果不是(并且它必须是浮点数),那么是否可以保证不准确性总是大于(而不是小于)原始值。换句话说:
>>> repr(0.1)
'0.10000000000000001' # More than 0.1 which is what I want
>>> repr(0.99)
'0.98999999999999999' # Less than 0.99 which is unacceptable
代码示例:
import math, time
sleep_time = 0.1
while True:
time_before = time.time()
time.sleep(sleep_time)
time_after = time.time()
time_taken = time_after - time_before
assert time_taken >= sleep_time, '%r < %r' % (time_taken, sleep_time)
修改
现在使用以下(在测试中没有失败但理论上仍然可能失败):
import time
from decimal import Decimal
def to_dec(float_num):
return Decimal('%2f' % float_num)
sleep_time = to_dec(0.1)
while True:
time_before = to_dec(time.time())
time.sleep(float(sleep_time))
time_after = to_dec(time.time())
time_taken = time_after - time_before
assert time_taken >= sleep_time, '%r < %r' % (time_taken, sleep_time)
print 'time_taken (%s) >= sleep_time (%s)' % (time_taken, sleep_time)
答案 0 :(得分:2)
您可以通过一些值简单地多个time.time()
来获得您想要的精度(请注意,许多调用无论如何都不能保证亚秒精度)。所以,
startTime = int(time.time() * 100)
#...
endTime = int(time.time() * 100)
满足endTime - startTime >= sleepTime
答案 1 :(得分:1)
答案 2 :(得分:0)
用于定时功能,需要记录可能睡眠的呼叫之前和之后的时间。因此,在&gt; =睡眠时间之前的时间之后,浮动的情况并非总是如此。
我认为您的要求不一致。您似乎想要两次调用相同的函数,并且第一次调用结果向下,第二次调用将结果向上调整。
如果我是你: