在我的单核1.4 GHz计算机上,我运行了以下2个时间码:
suzan:~$ python -mtimeit "
def count(n):
while n > 0:
n -= 1
count(10000000)
"
10 loops, best of 3: 1.73 sec per loop
suzan:~$
suzan:~$ python -mtimeit "
import os
def count(n):
while n > 0:
n -= 1
count(10000000)
"
10 loops, best of 3: 1.18 sec per loop
suzan:~$
第二个timeit命令显示的时间比第一个更短,即使它包含一行额外的代码“import os”。这是不寻常的行为还是预期的行为?
非常感谢任何帮助。
答案 0 :(得分:1)
我使用两个片段同时有效(在0.4%以内)。 Python将os模块作为正常导入的一部分导入
>>> import sys
>>> "os" in sys.modules
True
>>>
所以带有“import os”的第二位代码甚至没有击中磁盘。它只是检查sys.modules。
您可以检查导入 builtins 是否给出相同的反应,但我真的不知道如何解释您所看到的内容。您可以在启动Python时启用“-v”选项,以便对其正在执行的操作进行更多诊断,并比较结果。它们应该完全相同。
答案 1 :(得分:1)
我能想到的唯一可能的原因可以解释这种行为,应该不重要:L1缓存行未命中,我指的是数据缓存(Python VM字节码不是处理器的可执行代码)。您的count
函数的代码存储为单独的代码对象,其起始地址或速度不应受设置代码的影响。这是非常不正常的行为。
你的处理器是做什么的?你的Python版本?你的OS版本?测试结果是否可重复?