常乐我静 發表於 2026-1-7 09:36:05

Python计算代码运行时间的四种方法

<div id="navCategory"><h5 class="catalogue">目录</h5><ul class="first_class_ul"><li><a href="#_label0">1、计算程序运行CPU的时间</a></li><li><a href="#_label1">2、计算CPU的总运行时间</a></li><li><a href="#_label2">3、方法三</a></li><li><a href="#_label3">4、方法四</a></li><li><a href="#_label4">5、方法补充</a></li></ul></div><p class="maodian"><a name="_label0"></a></p><h2>1、计算程序运行CPU的时间</h2>
<div class="jb51code"><pre class="brush:py;">#python 的标准库手册推荐在任何情况下尽量使用time.clock().
#只计算了程序运行CPU的时间,返回值是浮点数
import time
start =time.clock()
#中间写上代码块
end = time.clock()
print('Running time: %s Seconds'%(end-start))</pre></div>
<p><span><strong>运行结果如下</strong></span></p>
<blockquote><p><span>Running time: 2.26660703157 Seconds</span></p></blockquote>
<p class="maodian"><a name="_label1"></a></p><h2>2、计算CPU的总运行时间</h2>
<div class="jb51code"><pre class="brush:py;">#该方法包含了其他程序使用CPU的时间,返回值是浮点数
import time
start=time.time()
#中间写上代码块
end=time.time()
print('Running time: %s Seconds'%(end-start))</pre></div>
<p><span><strong>运行结果</strong></span></p>
<blockquote><p><span>Running time: 4.90400004387 Seconds</span></p></blockquote>
<p class="maodian"><a name="_label2"></a></p><h2>3、方法三</h2>
<div class="jb51code"><pre class="brush:py;">#该方法包含了其他程序使用CPU的时间
import datetime
start=datetime.datetime.now()
#中间写代码块
end=datetime.datetime.now()
print('Running time: %s Seconds'%(end-start))</pre></div>
<p><span><strong>运行结果</strong></span></p>
<blockquote><p><span>Running time: 0:00:02.412000 Seconds</span></p></blockquote>
<p class="maodian"><a name="_label3"></a></p><h2>4、方法四</h2>
<div class="jb51code"><pre class="brush:py;">#在 Unix 系统中,建议使用 time.time(),在 Windows 系统中,建议使用 time.clock()
#实现跨平台的精度性可以使用timeit.default_timer()
import timeit
start=timeit.default_timer()
#中间写代码块
end=timeit.default_timer()
print('Running time: %s Seconds'%(end-start))</pre></div>
<p><span><strong>运行结果</strong></span></p>
<blockquote><p><span>Running time: 2.31757675399 Seconds</span></p></blockquote>
<p><span><strong>注释:</strong></span><strong>以上四种代码运行环境是Win7系统,都是在相同的代码块下运行的,可以对比代码运行时间获取windows系统下的最优方法;对于其他系统可以进行测试获取最优方法!</strong></p>
<p class="maodian"><a name="_label4"></a></p><h2>5、方法补充</h2>
<p>在Python中,你可以使用内置的<code>time</code>模块来测试代码的运行时间。下面是一个例子:</p>
<div class="jb51code"><pre class="brush:py;">import time

start_time = time.time()# 获取当前时间

# 在这里放置你想要测试的代码
for i in range(0, 1000000):
    pass

end_time = time.time()# 代码运行后再次获取当前时间

execution_time = end_time - start_time# 计算运行时间

print(f"代码运行时间: {execution_time}秒")
</pre></div>
<p>这个代码会首先记录开始时间,然后运行一段代码(在这个例子中是一个简单的for循环),然后再记录结束时间。运行时间就是结束时间减去开始时间。</p>
<p>另外,如果你想要更精确的时间测量,你可以使用<code>timeit</code>模块,它提供了一个简单的方法来计时小段Python代码。它有命令行接口和Python库接口。这是一个例子:</p>
<div class="jb51code"><pre class="brush:py;">import timeit

start_time = timeit.default_timer()

# 在这里放置你想要测试的代码
for i in range(0, 1000000):
    pass

end_time = timeit.default_timer()

print(f"代码运行时间: {end_time - start_time}秒")
</pre></div>
<p>timeit.default_timer()`在不同的平台上会使用最精确的计时器。</p>
<p><strong>示例</strong></p>
<p>编写一个Python脚本来计算每个函数运行10000次的时间。</p>
<p>下面是一个示例代码:</p>
<div class="jb51code"><pre class="brush:py;">import timeit

# 定义你的函数
def function1():
    # 函数1的代码
    pass

def function2():
    # 函数2的代码
    pass

def function3():
    # 函数3的代码
    pass

# 使用timeit来测量每个函数的执行时间
print("Measuring execution time for function1:")
start_time = timeit.default_timer()
for _ in range(10000):
    function1()
end_time = timeit.default_timer()
print(f"Time taken by function1: {end_time - start_time} seconds")

print("Measuring execution time for function2:")
start_time = timeit.default_timer()
for _ in range(10000):
    function2()
end_time = timeit.default_timer()
print(f"Time taken by function2: {end_time - start_time} seconds")

print("Measuring execution time for function3:")
start_time = timeit.default_timer()
for _ in range(10000):
    function3()
end_time = timeit.default_timer()
print(f"Time taken by function3: {end_time - start_time} seconds")
</pre></div>
<p>然而,这种方法不是<code>timeit</code>模块的最佳实践,因为它包含了循环的开销。更好的方法是使用<code>timeit.repeat()</code>,这样<code>timeit</code>模块会为你处理循环,并且可以提供更准确的计时,排除其他不必要的开销。</p>
<p>下面是使用<code>timeit.repeat()</code>的改进版本:</p>
<div class="jb51code"><pre class="brush:py;">import timeit

# 定义你的函数
def function1():
    # 函数1的代码
    pass

def function2():
    # 函数2的代码
    pass

def function3():
    # 函数3的代码
    pass

# 设置timeit参数
setup_code = """
from __main__ import function1, function2, function3
"""
stmt1 = "function1()"
stmt2 = "function2()"
stmt3 = "function3()"
number_of_runs = 10000
repeats = 3# 重复测量次数以获得更稳定的结果

# 使用timeit.repeat来测量每个函数的执行时间
print("Measuring execution time for function1:")
times1 = timeit.repeat(stmt=stmt1, setup=setup_code, repeat=repeats, number=number_of_runs)
print(f"Average time taken by function1: {min(times1)} seconds")

print("Measuring execution time for function2:")
times2 = timeit.repeat(stmt=stmt2, setup=setup_code, repeat=repeats, number=number_of_runs)
print(f"Average time taken by function2: {min(times2)} seconds")

print("Measuring execution time for function3:")
times3 = timeit.repeat(stmt=stmt3, setup=setup_code, repeat=repeats, number=number_of_runs)
print(f"Average time taken by function3: {min(times3)} seconds")
</pre></div>
<p>在这个例子中,<code>setup_code</code>导入了必要的函数,<code>stmt1</code>、<code>stmt2</code>和<code>stmt3</code>是要执行的语句(即函数调用),<code>number_of_runs</code>指定了每个函数要运行的次数,而<code>repeats</code>指定了每个测量要重复的次数。最后,我们取多次测量的最小值作为最接近真实执行时间的估计。</p>
<p><strong>解释timeit模块中setup参数</strong></p>
<p><code>setup</code>参数接收一个字符串,该字符串包含在执行要计时的语句之前需要运行的代码。告诉<code>timeit</code>如何设置环境以便能够运行这段代码。这通常包括导入必要的模块或定义要使用的函数和变量。</p>
<p>上述代码片段中:</p>
<div class="jb51code"><pre class="brush:py;">setup_code = """
from __main__ import function1, function2, function3
"""
</pre></div>
<p><code>setup_code</code>是一个多行字符串,它告诉<code>timeit</code>模块从<code>__main__</code>模块中导入<code>function1</code>、<code>function2</code>和<code>function3</code>这三个函数。这里的<code>__main__</code>模块是指当前正在运行的Python脚本,也就是包含这些函数定义的脚本。</p>
<p><code>timeit</code>模块将在一个单独的命名空间中执行<code>setup</code>代码,以确保测量的是纯粹的函数执行时间,而不受其他全局变量的影响。通过在<code>setup</code>中导入函数,你确保了<code>timeit</code>能够访问并正确调用这些函数。</p>
<p>简而言之,<code>from __main__ import function1, function2, function3</code>这行代码的目的是让<code>timeit</code>知道它需要测量的函数在哪里,并确保这些函数在测量过程中是可用的。</p>
頁: [1]
查看完整版本: Python计算代码运行时间的四种方法