python計算程序的運行時間的方法(python程序,jupyter)

寫在開頭

由於平時工作、測試或者實驗需要,經常需要計算程序運行時間,其運行環境一般是jupyter或非jupyter環境。本文將對其進行總結,方便下次使用(好記心不如爛筆頭嘛)

Python程序中經常使用方法

python中用於計算時間的有time,datetime
(1)其中time包提供了有關時間的方法,與計算當前時間有關的方法有time(), clock(), perf_counter(), process_time(),default_timer()五種方法(嚴格來說是三種)
(2)datatime中datetime.datetime.now()方法
下面對這些方法一一進行介紹:
(1)time()方法

import time
start = time.time()
time.sleep(2)
end = time.time()
print(end-start)

(2)datetime.now()

start = datetime.datetime.now()
time.sleep(2)
end = datetime.datetime.now()
print(end-start)

(3)default_timer()

import timeit
start=timeit.default_timer()
time.sleep(2)
end=timeit.default_timer()
print('Running time: %s Seconds'%(end-start))

(4)clock()

import time
start = time.clock()
time.sleep(2)
end = time.clock()
print(end-start)

但是會出現警告信息:

5: DeprecationWarning: time.clock has been deprecated in Python 3.3 and will be removed from Python 3.8: use time.perf_counter or time.process_time instead

即該方法在pyhon3.3版本之後就已經棄用了,在python3.8之後將會被移除,也就是說該方法在python3.8以前還可以用,但是不建議用,在python3.8以後再用就會報錯了!而pref_counter()和process_time將會將其替代(區別後面介紹)

(5)pref_counter()

import time
start = time.perf_counter()
time.sleep(2)
end = time.perf_counter()
print(end-start)

(6)process_time()

import time
start = time.process_time()
time.sleep(2)
end = time.process_time()
print(end-start)

至於這兩種方法區別的話,很簡單,perf_count()計算的是程序運行時間,以及sleep()方法時間;而process_time()方法顧名思義,只是計算程序運行時間,不計算sleep()方法。所以,嚴格來說,pref_counter()纔是clock()的替代方法。

jupyter 中的快捷統計程序運行時間的方法

jupyter中提供了簡潔的統計程序運行時間的方法,包括%%time, %time, %timeit方法
(1)%%time(統計cell塊運行時間)

%%time
time.sleep(2)
for i in range(10000):
	print(i)

(2)%time(統計語句行運行時間)

%time time.sleep(2)

(3)%timeit(使用Python的timeit模塊,它將會執行一個語句100,000次(默認情況下),然後給出運行最快3次的平均值。)

x = 1000
%timeit xx = x*x 

輸出:

99.7 ns ± 1.22 ns per loop (mean ± std. dev. of 7 runs, 10000000 loops each)

總結

下面將對通用的計算程序運行時間的方法進行總結
1、這些方法各有優缺點,time.time()方法與datetime.datetime.now()方法計算程序運行時間並不準確,以爲他們還計算了其他程序佔用CPU的時間。
2、而time.clock(),time.perf_counter(),time.process_time()計算比較準確,但是python3.8以後clock()將被perf_counter()方法所取代。
3、系統平臺也限制了這些方法統計時間的性能差異,因此,Linux下推薦使用time.time();windows下使用time.perf_counter()或者time().process_time()方法;在爲了實現跨平臺的精度性時,可以使用timeit.default_timer()方法。

【參考博客】
[1]: https://www.cnblogs.com/yuehouse/p/11493901.html
[2]: https://blog.csdn.net/mxxxkuku/article/details/95784259
[3]: https://blog.csdn.net/qq_27283619/article/details/89280974?depth_1-utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-5&utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-5
[4]: https://blog.csdn.net/zdx1996/article/details/86583676?depth_1-utm_source=distribute.pc_relevant.none-task-blog-OPENSEARCH-7&utm_source=distribute.pc_relevant.none-task-blog-OPENSEARCH-7

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章