gpt4 book ai didi

python - 在 Python 中导入的准确时间

转载 作者:行者123 更新时间:2023-11-28 17:16:09 26 4
gpt4 key购买 nike

timeit模块非常适合测量小代码片段的执行时间,但是当代码更改全局状态(如 timeit)时,很难获得准确的计时。

例如,如果我想计算导入模块的时间,那么第一次导入将比后续导入花费更长的时间,因为子模块和依赖项已经导入并且文件已经缓存。所以使用更大的 number 重复,比如:

>>> import timeit
>>> timeit.timeit('import numpy', number=1)
0.2819331711316805

>>> # Start a new Python session:
>>> timeit.timeit('import numpy', number=1000)
0.3035142574359181

并没有真正起作用,因为一次执行的时间几乎与 1000 轮相同。我可以执行命令来“重新加载”包:

>>> timeit.timeit('imp.reload(numpy)', 'import importlib as imp; import numpy', number=1000)
3.6543283935557156

但它只比第一个 import 慢 10 倍,这似乎表明它也不准确。

完全卸载模块似乎也是不可能的 ( "Unload a module in Python" )。

所以问题是:准确测量 import 时间的合适方法是什么?

最佳答案

由于完全卸载模块几乎是不可能的,也许这个答案背后的灵感来自 this ...

您可以在 python 脚本中运行一个循环,以运行 x 次导入 numpy 的 python 命令和另一个什么都不做的命令,然后减去两者 + 平均值:

import subprocess,time

n=100
python_load_time = 0
numpy_load_time = 0

for i in range(n):
s = time.time()
subprocess.call(["python","-c","import numpy"])
numpy_load_time += time.time()-s

s = time.time()
subprocess.call(["python","-c","pass"])
python_load_time += time.time()-s

print("average numpy load time = {}".format((numpy_load_time-python_load_time)/n))

关于python - 在 Python 中导入的准确时间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43989235/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com