时间多个python3脚本

时间:2017-12-18 18:47:33

标签: python python-3.x time timeit

将来我会在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)?

2 个答案:

答案 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