Python 實(shí)現(xiàn)一個(gè)計(jì)時(shí)器
問題
你想記錄程序執(zhí)行多個(gè)任務(wù)所花費(fèi)的時(shí)間
解決方案
time 模塊包含很多函數(shù)來執(zhí)行跟時(shí)間有關(guān)的函數(shù)。 盡管如此,通常我們會(huì)在此基礎(chǔ)之上構(gòu)造一個(gè)更高級的接口來模擬一個(gè)計(jì)時(shí)器。例如:
import time class Timer: def __init__(self, func=time.perf_counter): self.elapsed = 0.0 self._func = func self._start = None def start(self): if self._start is not None: raise RuntimeError('Already started') self._start = self._func() def stop(self): if self._start is None: raise RuntimeError('Not started') end = self._func() self.elapsed += end - self._start self._start = None def reset(self): self.elapsed = 0.0 @property def running(self): return self._start is not None def __enter__(self): self.start() return self def __exit__(self, *args): self.stop()
這個(gè)類定義了一個(gè)可以被用戶根據(jù)需要啟動(dòng)、停止和重置的計(jì)時(shí)器。 它會(huì)在 elapsed
屬性中記錄整個(gè)消耗時(shí)間。 下面是一個(gè)例子來演示怎樣使用它:
def countdown(n): while n > 0: n -= 1 # Use 1: Explicit start/stop t = Timer() t.start() countdown(1000000) t.stop() print(t.elapsed) # Use 2: As a context manager with t: countdown(1000000) print(t.elapsed) with Timer() as t2: countdown(1000000) print(t2.elapsed)
討論
本節(jié)提供了一個(gè)簡單而實(shí)用的類來實(shí)現(xiàn)時(shí)間記錄以及耗時(shí)計(jì)算。 同時(shí)也是對使用with語句以及上下文管理器協(xié)議的一個(gè)很好的演示。
在計(jì)時(shí)中要考慮一個(gè)底層的時(shí)間函數(shù)問題。一般來說, 使用 time.time()
或 time.clock()
計(jì)算的時(shí)間精度因操作系統(tǒng)的不同會(huì)有所不同。 而使用 time.perf_counter()
函數(shù)可以確保使用系統(tǒng)上面最精確的計(jì)時(shí)器。
上述代碼中由 Timer
類記錄的時(shí)間是鐘表時(shí)間,并包含了所有休眠時(shí)間。 如果你只想計(jì)算該進(jìn)程所花費(fèi)的CPU時(shí)間,應(yīng)該使用 time.process_time() 來代替:
t = Timer(time.process_time) with t: countdown(1000000) print(t.elapsed)
time.perf_counter()
和 time.process_time()
都會(huì)返回小數(shù)形式的秒數(shù)時(shí)間。 實(shí)際的時(shí)間值沒有任何意義,為了得到有意義的結(jié)果,你得執(zhí)行兩次函數(shù)然后計(jì)算它們的差值。
以上就是Python 實(shí)現(xiàn)一個(gè)計(jì)時(shí)器的詳細(xì)內(nèi)容,更多關(guān)于Python 計(jì)時(shí)器的資料請關(guān)注腳本之家其它相關(guān)文章!
- Python功能點(diǎn)實(shí)現(xiàn):函數(shù)級/代碼塊級計(jì)時(shí)器
- python實(shí)現(xiàn)屏保計(jì)時(shí)器的示例代碼
- python中的計(jì)時(shí)器timeit的使用方法
- python實(shí)現(xiàn)簡單的計(jì)時(shí)器功能函數(shù)
- python 實(shí)現(xiàn)一個(gè)圖形界面的匯率計(jì)算器
- 如何Tkinter模塊編寫Python圖形界面
- python如何實(shí)現(xiàn)讀取并顯示圖片(不需要圖形界面)
- 健身房被搭訕?用python寫了個(gè)小米計(jì)時(shí)器助人為樂
相關(guān)文章
Python使用datetime庫實(shí)現(xiàn)對時(shí)間的獲取方法
這篇文章通過一個(gè)簡單示例給大家介紹了Python如何使用datetime庫實(shí)現(xiàn)對時(shí)間的獲取方法,文章通過代碼示例給大家介紹的非常詳細(xì),具有一定的參考價(jià)值,需要的朋友可以參考下2023-11-11python Bamboolib庫加速Pandas數(shù)據(jù)分析過程詳解
這篇文章主要介紹了python Bamboolib庫加速Pandas數(shù)據(jù)分析過程詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2024-01-01菜鳥使用python實(shí)現(xiàn)正則檢測密碼合法性
本文給大家分享了2則使用Python實(shí)現(xiàn)正則表達(dá)式檢測密碼合法性的代碼,由于是新手,所以方法比較笨,不過還是分享給小伙伴,希望對大家能夠有所幫助。2016-01-01python將Dataframe格式的數(shù)據(jù)寫入opengauss數(shù)據(jù)庫并查詢
這篇文章主要介紹了python將Dataframe格式的數(shù)據(jù)寫入opengauss數(shù)據(jù)庫并查詢,文章介紹詳細(xì)具有一定的參考價(jià)值,希望對你的學(xué)習(xí)有所幫助2022-04-04布同 統(tǒng)計(jì)英文單詞的個(gè)數(shù)的python代碼
最近需要翻譯英文文章,所以需要統(tǒng)計(jì)單詞個(gè)數(shù)。索性寫了一段代碼在此,可以簡單的統(tǒng)計(jì)單詞的個(gè)數(shù)2011-03-03基于python 將列表作為參數(shù)傳入函數(shù)時(shí)的測試與理解
這篇文章主要介紹了基于python 將列表作為參數(shù)傳入函數(shù)時(shí)的測試與理解,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-06-06