Python 中用來獲得代碼的執行時間的操作常見有兩種:直接記錄起始和結束時間、使用 time 模塊來獲得 。在一般的大數據計算時,時間的節約是至關重要的 。除此之外,我們也需要對測試的時間差有一個較為詳盡的了解 。
一、簡單計算時間
【python測試運行的時間差?】

記錄時間差可以用 Python 中自帶的 datetime 庫的 datetime.datetime.now() 方法 。通過下面的代碼來計算一個函數的運行時間:
def time_cost(fn):
start = datetime.datetime.now()
fn()
print("time cost : ", datetime.datetime.now() - start)
運行上述代碼,可以得到 fn 函數的運行時間:
$ time cost : 0:00:01.000417
第二種方式是time庫,計算某個函數執行的時間需要如下操作:
import time
def time_cost(fn):
start = time.time()
fn()
print("time cost : ", time.time() - start)
實現方案2的操作:
def foo():
time.sleep(1)
time_cost(foo)
輸出如下:
$ time cost : 1.0004310607910156
也就是說通過 time 庫我們可以精確計時,精確到小數點后六位 。
二、性能分析模塊——cProfile
cProfile 同時提供了命令行和 API 使用方式,命令行方式和 pycharm , anaconda 都帶有這個模塊 。所以無論你是使用命令行還是 pycharm , 都可以放心一起來對我們的 Python 代碼來進行分析,找到其中性能的瓶頸所在,從而可以優化它 。下面是簡單而又直觀的一個例子 , 可以幫助開發者更好的理解問題所在 。
import cProfile
def foo():
list1 = []
for i in range(10000):
list1.append(i)
for j in range(10000):
list1.index(j)
cProfile.run("foo()")
展開之后,可以看到 類似于以下的輸出:
40004 function calls in 0.012 seconds
Ordered by: standard name
ncalls tottime percall cumtime percall filename:lineno(function)
1 0.002 0.002 0.012 0.012 :1(
2 0.001 0.001 0.002 0.001 {built-in method builtins.append}
10000 0.006 0.000 0.009 0.000 {built-in method builtins.index}
這樣就可以比較容易的找到代碼中的性能瓶頸所在 。
三、timeit模塊
timeit模塊是一個小工具 , 它可以用來測量方法的執行時間 。它在經過一些設置之后會返回方法的執行時間,并且可以通過參數設置不同的執行回數 。
通過導入方法,實現的方式非常的簡單 。
import timeit
nums = [1, 2, 3, 4]
def use_append(num):
temp = []
for i in range(num):
temp.append(i)
print(timeit.timeit('use_append(10000)', setup='from __main__ import use_append', number=1000))
輸出在我的電腦上是:0.6679865 , 即用 append 的函數用 10000 次執行的時間是 0.66 秒,執行了 1000 次 。
四、總結
測試運行的時間差的方法不同,可以根據業務情況和代碼的復雜度來選擇更加適合的方法 。在大數據計算時,測試代碼運行效率的優化是至關重要的 。本文總結介紹了3種情況下Python常用的時間差測試方法,datetime庫、cProfiler和timeit庫,這些工具可以幫助我們更好地優化代碼,在大數據量的計算中提高效率 。另外 , 在使用這三種方法時,不宜只看其表面意義,最好能結合代碼運行的實際情況和數據表現進行分析和比較,更好的尋找改進空間 。
猜你喜歡
- python怎么把字符串轉為字典?
- python繪制愛心?
- python 如何控制鼠標操作?
- python截取小數點后兩位?
- 怎么把python卸載?
- python 字典如何讀取value?
- python逐行讀取內容?
- python如何新建一個txt文件?
- python 將安裝包卸載?
- python讀取文件路徑的格式?
