python計算程序的運行時間的方法
寫在開頭
由於平時工作、測試或者實驗需要,經常需要計算程序運行時間,其運行環境一般是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