将来我会在Python 3中编写多个小脚本,我想要时间。一种方法是像这样编写每个脚本:
# functions definitions go here
if __name__ == '__main__':
import time
start = time.time()
# my code
end = time.time()
print("This script took {} seconds to execute".format(end - start))
但我必须将其写入这些脚本中的每一个。什么是最好的方式来计算我的脚本每次不包括这些代码(不失准确性 - 我知道time ./script.py
)?
答案 0 :(得分:2)
使用timeit vs time模块。这最适合比较一种方式来做某事而不是另一种方式来做同样的事情。
这是非常简单的模板:
# if f1,f2,f3 are in another module or script, just import...
def f1(s):
# that function returns something...
def f2(s):
# etc
def f3(s):
# etc
if __name__=='__main__':
import timeit
for case, x in (('small',1000),('med',10000),('large',1000000)):
data=[some data scaled by x]
print("Case {}, {:,} x, All equal: {}".format(case,x,(f1(data)==f2(data)==f3(data))))
for f in (f1,f2,f3):
print(" {:^10s}{:.4f} secs".format(f.__name__, timeit.timeit("f(data)", setup="from __main__ import f, data", number=10)))
这应该让你开始。更具体地说明您对更具体的答案有什么问题。
我的other answers之一有更多竞争timeit
示例。
您还可以查看cProfile来分析完整的脚本并识别瓶颈功能。然后使用timeit
尝试该瓶颈函数的变体。
答案 1 :(得分:0)
如果您使用的是unix环境,则可以使用shell。
如果您与脚本位于同一文件夹中:
$ time python mymodule.py
real 0m0.307s
user 0m0.030s
sys 0m0.030s
如果您在安装的软件包中有脚本(我建议editable mode),您可以使用模块名称从任何地方运行
$ time python -m mypackage.mymodule
real 0m0.407s
user 0m0.033s
sys 0m0.032s