繁体   English   中英

python时间结果与预期不符:time.time()-time.time()

[英]python time results not as expected: time.time() - time.time()

在处理time的python执行time ,我发现在单个语句中两次调用time.time()时出现了奇怪的行为。 语句执行期间获取time.time()处理延迟非常小。

例如time.time()-time.time()

如果在理想环境中立即执行,则结果将为0。

但是,在现实世界中,这会导致数量非常少,因为在处理器执行第一次time.time()计算和下次执行time时,假定存在延迟。 但是,当运行相同的执行并将其与以相同方式计算的变量进行比较时,结果将朝一个方向倾斜。

请参见下面的小代码段。 对于非常大的数据集也是如此

import time

counts = 300000

def at_once():
  first = 0
  second = 0
  x = 0
  while x < counts:
      x += 1
      exec_first = time.time() - time.time()
      exec_second = time.time() - time.time()

      if exec_first > exec_second:
          first += 1
      else:
          second += 1


print('1sts: %s' % first)
print('2nds: %s' % second)

印刷品:

1sts: 39630
2nds: 260370

除非我的逻辑不正确,否则我期望结果非常接近50:50,但事实并非如此。 有谁能解释造成这种现象的原因或指出导致结果偏向一个方向的代码逻辑的潜在缺陷?

可能是exec_first == exec_second吗? 在这种情况下,if-else会加1。

尝试将if-else更改为以下内容:

if exec_first > exec_second:
    first += 1
elif exec_second > exec_first:
    second += 1
else:
    pass

您将所有关系分配给一个类别。 尝试一下:

import time

counts = 300000
first = 0 
second = 0 
same = 0

for _ in range(counts):
    exec_first = time.time() - time.time()
    exec_second = time.time() - time.time()

    if exec_first == exec_second:
        same += 1
    elif exec_first > exec_second:
        first += 1 
    else:
        second += 1 

print('1sts: %s' % first)
print('same: %s' % same)
print('2nds: %s' % second)

输出:

$ python3 so.py
1sts: 53099
same: 194616
2nds: 52285
$ python3 so.py
1sts: 57529
same: 186726
2nds: 55745

另外,对于您为什么认为函数调用可能花费0的时间,我感到困惑。 每次调用都至少需要访问系统时钟并将该值复制到某种临时位置。 这在当前的任何计算机上都没有多余的开销。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM