161

我在 python 脚本中有以下代码:

def fun(): 
  #Code here

fun()

我想执行这个脚本,还想知道在几分钟内执行了多少时间。如何找出执行此脚本所需的时间?一个例子将不胜感激。

4

9 回答 9

293
from datetime import datetime
startTime = datetime.now()

#do something

#Python 2: 
print datetime.now() - startTime 

#Python 3: 
print(datetime.now() - startTime)
于 2011-07-22T07:38:36.230 回答
149

您是在 Linux 还是 UNIX 上从命令行执行脚本?在这种情况下,您可以使用

time ./script.py
于 2011-07-22T07:38:44.167 回答
76
import time
start = time.time()

fun()

# python 2
print 'It took', time.time()-start, 'seconds.'

# python 3
print('It took', time.time()-start, 'seconds.')
于 2011-07-22T15:02:59.647 回答
17

我通常做的是使用clock()time()time图书馆。clock测量解释器时间,同时time测量系统时间。可以在docs中找到其他警告。

例如,

def fn():
    st = time()
    dostuff()
    print 'fn took %.2f seconds' % (time() - st)

或者,您可以使用timeit. 我经常使用这种time方法,因为我能以多快的速度完成它,但如果你正在计时一段可隔离的代码,timeit它会派上用场。

timeit 文档

def test():
    "Stupid test function"
    L = []
    for i in range(100):
        L.append(i)

if __name__=='__main__':
    from timeit import Timer
    t = Timer("test()", "from __main__ import test")
    print t.timeit()

然后要转换为分钟,您可以简单地除以 60。如果您希望脚本运行时采用易于阅读的格式,无论是秒还是天,您都可以转换为 atimedeltastr它:

runtime = time() - st
print 'runtime:', timedelta(seconds=runtime)

这将打印出一些形式[D day[s], ][H]H:MM:SS[.UUUUUU]。您可以查看timedelta 文档

最后,如果您实际上是在分析您的代码,Python 也提供了配置文件库

于 2011-07-22T08:49:25.970 回答
16
import time 

startTime = time.time()
# Your code here !
print ('The script took {0} second !'.format(time.time() - startTime))

以前的代码对我有用,没有问题!

于 2016-01-12T12:00:10.020 回答
15
import sys
import timeit

start = timeit.default_timer()

#do some nice things...

stop = timeit.default_timer()
total_time = stop - start

# output running time in a nice format.
mins, secs = divmod(total_time, 60)
hours, mins = divmod(mins, 60)

sys.stdout.write("Total running time: %d:%d:%d.\n" % (hours, mins, secs))
于 2017-02-07T22:44:12.247 回答
10

使用 timeit 模块。这很容易。运行您的 example.py 文件,使其在 Python Shell 中处于活动状态,您现在应该能够在 shell 中调用您的函数。试试看它是否有效

>>>fun(input)
output

很好,可以,现在导入 timeit 并设置一个计时器

>>>import timeit
>>>t = timeit.Timer('example.fun(input)','import example')
>>>

现在我们设置了计时器,我们可以看到需要多长时间

>>>t.timeit(number=1)
some number here

我们开始了,它会告诉你执行该功能需要多少秒(或更少)。如果它是一个简单的函数,那么您可以将其增加到 t.timeit(number=1000) (或任何数字!),然后将答案除以数字以获得平均值。

我希望这有帮助。

于 2012-11-16T14:37:05.167 回答
1

纯 Python

更好的是time.perf_counter()

t0 = time.perf_counter()
fun()
t1 = time.perf_counter()
print(t1-t0)

# and if you really want your answer in minutes:
print(f"In minutes: {(t1-t0)/60}")

这个人也推荐(5:30)。

文档

time.perf_counter()→ float

返回性能计数器的值(以秒为单位),即具有最高可用分辨率的时钟以测量短持续时间。它确实包括睡眠期间经过的时间,并且是系统范围的。返回值的参考点是未定义的,因此只有两次调用结果之间的差异才有效。

用于perf_counter_ns()避免浮点类型造成的精度损失。

3.3 版中的新功能。

在 3.10 版更改:在 Windows 上,该功能现在是系统范围的。


Jupyter Notebook: %timeit&%time魔法

如果您在 Jupyter Notebook(例如Google Colab)中工作,则可以使用 IPython 魔术命令。

例子:

import time
import numpy as np
np.random.seed(42)

def fun(): 
    time.sleep(0.1+np.random.rand()*0.05)

然后在一个单独的单元格中,函数进行多次计时:

%timeit fun()

输出:

10 loops, best of 5: 120 ms per loop

只对函数计时一次

%time fun()

输出:

CPU times: user 0 ns, sys: 621 µs, total: 621 µs
Wall time: 114 ms

您可以在此处找到有关魔术命令的更多信息。

于 2021-12-03T12:02:16.850 回答
0

使用时间和日期时间包。

如果有人想执行这个脚本并找出在几分钟内执行了多少时间

import time
from time import strftime
from datetime import datetime 
from time import gmtime

def start_time_():    
    #import time
    start_time = time.time()
    return(start_time)

def end_time_():
    #import time
    end_time = time.time()
    return(end_time)

def Execution_time(start_time_,end_time_):
   #import time
   #from time import strftime
   #from datetime import datetime 
   #from time import gmtime
   return(strftime("%H:%M:%S",gmtime(int('{:.0f}'.format(float(str((end_time-start_time))))))))

start_time = start_time_()
# your code here #
[i for i in range(0,100000000)]
# your code here #
end_time = end_time_()
print("Execution_time is :", Execution_time(start_time,end_time))

上面的代码对我有用。我希望这有帮助。

于 2019-12-10T09:48:04.077 回答