2016-11-24 60 views
3

我正在尋找一種方法來測量我的python程序的CPU時間。我環顧四周,看來我一直在測量功能,我可以在窗口上測量掛鐘時間。有沒有一種方法可以測量python窗口的CPU時間?謝謝。窗口上的Python CPU時間

回答

2

time.process_time()

https://www.python.org/dev/peps/pep-0418/

新time.process_time()函數作爲一個便攜式計數器 始終測量CPU時間(不包括睡眠時經過的時間),並有 最佳可用分辨率。

早些時候回答想要的任何人使用timeit()來平均

我寫了這個,而最近學習Python的。這是一個timeit.Timer類迭代timeit()通過函數進行平均;在我的研究時間似乎很容易搞砸和timeit()顯然是棘手的工作(雖然更容易在命令行工作)。這工作。

還應注意這個答案暗示最好的辦法是time.process_time()爲Python 3.3+和提醒.default_timer()是掛鐘時間:

https://stackoverflow.com/a/15176730/3981745

""" Sum a range with timing/comparisons. 

    - Manually summing from low..high : a beginner's loop with no algorithms experience 
    - Python's sum() - does the same thing for an "efficient" programmer 
    - Fast sum - a programmer with math focus 
    - Timing calls (easy to do wrong) 

    This is a trivial formula to demonstrate what a little math can do; for games this type of optimization is critical. It could probably be even more optimized. 
""" 

def slow_way(lo, hi): 
    s=0 
    for i in range(lo, hi+1): 
     s+=i 
    return s 

def fast_way(lo, hi): 
    lph=lo+hi  # lo plus hi 
    hmlpo=hi-lo+1 # hi minus lo plus one 
    pairs=hmlpo//2 

    #print("-", lo,hi,pairs, pairs*lph, (lo+pairs)*(hmlpo%2)) 

    return (pairs*lph + (lo+pairs)*(hmlpo%2)) 

import timeit 
# 'builtin' hack doesn't seem to work 
#import __builtin__ 
#__builtin__.__dict__.update(locals()) 

ranges=[] 
ranges.append((1,10,)) 
ranges.append((2,10,)) 
ranges.append((3,10,)) 
ranges.append((4,10,)) 
ranges.append((5,10,)) 
ranges.append((32,10032,)) 

print("Calculation check...") 
print("slow : sum : fast : should all match") 
for tupl in ranges: 
    l=tupl[0]; h=tupl[1] 
    print("{} : {} : {}".format(slow_way(l,h), sum(range(l, h+1)), fast_way(l,h))) 

iters=100000 
print("-"*20 +"\nTime compare ({} iterations) : lower is better".format(iters)) 
slow=timeit.Timer("slow_way(1,101)", "from __main__ import slow_way") 
print("slow: {0:.6f}".format(slow.timeit(number=iters))) 

# functions include last number, range should be +1 
s=timeit.Timer("sum(range(1,102))", "") 
print(" sum: {0:.6f}".format(s.timeit(number=iters))) 

fast=timeit.Timer("fast_way(1,101)", "from __main__ import fast_way") 
print(" fast: {0:.6f}".format(fast.timeit(number=iters))) 

輸出

Calculation check... 
slow : sum : fast : should all match 
55 : 55 : 55 
54 : 54 : 54 
52 : 52 : 52 
49 : 49 : 49 
45 : 45 : 45 
50325032 : 50325032 : 50325032 
-------------------- 
Time compare (100000 iterations) : lower is better 
slow: 4.719885 
sum: 0.963886 
    fast: 0.343524 
+0

我不介意你的編輯......或者我可以刪除多餘的自己,如果人們認爲更好。 –

0

time.clock()

在Windows上,您可以使用time.clock(),它基本上使用Windows API中的QueryPerformanceCounter()

QueryPerformanceCounter的():

檢索性能計數器,這是可以被用於時間間隔測量高分辨率(<爲1us)時間戳的當前值。

下面是從python文檔爲time.clock的詳細說明:

在Unix,返回當前處理器時間以秒錶示的浮點數。精確性,實際上「處理器時間」含義的定義取決於具有相同名稱的C函數的精確性,但無論如何,這是用於基準測試Python或時序算法的函數。 在Windows上,此函數基於Win32函數QueryPerformanceCounter(),將自第一次調用此函數以來的壁鐘時間秒作爲浮點數返回。分辨率通常優於1微秒。

timeit

如果你需要一些更準確的有timeit。這個答案解釋了timeit的好處:https://stackoverflow.com/a/17579466/2394967

+0

這是問題所在。我目前使用這個函數的時間。 start_time = timeit.default_timer()elapsed =(timeit.default_timer() - start_time)。但是當我在這兩者之間停頓時,它仍然會計算暫停時間。這是否使它成爲掛鐘定時器而不是CPU定時器? – Saik

+0

是的。 default_timer是掛鐘(它在文檔中)。 –

+0

但time.clock()也給我一個掛鐘,它似乎只會在Unix上使用CPU時間。我怎樣才能讓它在windows上給我CPU時間:) – Saik