2014-12-24 43 views
1

我想爲我的模塊做一個秒錶功能。這是記錄我的模塊被調用的時間,以便導入到完全導入的時間。我試圖記錄這個的原因是因爲我的模塊需要永久加載(因爲它需要編譯來自外部源的數據並將這些數據合併到列表中)。永遠是大約90秒。我查了類似的問題,但它只是關於創建倒計時或定時器。只要他們使用python的內置模塊,我可以選擇很多選項。如果已經有這樣的東西,如果你能告訴我,那將是很棒的。提前致謝!不使用Tk創建一個秒錶(不是倒計時或計時器)python

如果您需要更多信息,請留下評論,我會盡快與您聯繫。 :)

編輯:

考慮到MeetTitan的答案,我做了這個測試功能,嘗試了這一點:

def f(): 
    import time 
    starttime = time.time() 
    import tms # This is my module that takes forever to load 
    print("Time Taken {}".format(int(time.clock() - starttime))) 

>>> f() 
Loading module. This may take up to 60 seconds. 
Time taken -1419389848 # What does this mean? 

下面是它在Python文檔說:

時間.clock()

在Unix上,將當前處理器時間返回爲以秒爲單位的浮點數。精確性,實際上「處理器時間」含義的定義取決於具有相同名稱的C函數的精確性,但無論如何,這是用於基準測試Python或時序算法的函數。

了time.time()

返回從epoch作爲浮點數以秒的時間。請注意,即使時間總是以浮點數形式返回,但並非所有系統的時間精度都比1秒高。雖然此函數通常返回非遞減值,但如果系統時鐘已在兩次調用之間回退,則它可以返回比先前調用更低的值。

輸出數字應該是負數?它真正的時間是什麼?對不起,如果我問的問題太多了......

編輯:

我知道了。

def f(): 
    import time 
    start time = time.time() 
    import tms 
    print("Time taken {}".format(int(time.clock() - starttime))) 

現在,這是我的最後一個問題。我怎麼了我現有的代碼中集成這樣,當我在此類型:

>>> import tms 
Loading module. This may take up to 60 seconds. # after 30 seconds... 
Time taken 31.49 seconds 

這是我的代碼開頭:

import os, sys, time 

# Does the code go somewhere here? How would I implement it? 

print("Loading module. This may take up to 60 seconds. 

tmlist = [] 
alltmlist = [] 
gen1tmlist = [] 
gen2tmlist = [] 

我做了,滿懷希望後續問題我的「想法」越來越有效。點擊here

+0

'time.clock()'已被棄用,據我所知。你還混合了'time.clock()'和'time.time()',它們不會輸出任何合乎邏輯的東西。如果負值持續存在,絕對值是否正確?如果這樣使用它。 – MeetTitan

+0

看看我的編輯,我有一個錯字。 :-(重新複製粘貼,你會很好:-)。即使'time.clock()'已被棄用,我喜歡它。您可以選擇使用更喜歡的任何一種,或者在您的系統上提供最佳分辨率。但是請記住,如果您執行'startTime = time.time()',您必須執行'time.time() - startTime',反之亦然。 – MeetTitan

+0

通常不是一個好主意,將所有處理放在頂層,即在進口時運行。但是,它在導入後由腳本調用的函數中。然後,您可以輕鬆更改,測試和檢查發生了什麼。 – Keith

回答

1

如果您正在尋找時間片段,time.time()方法就是您要做的。試試這個:

startTime = time.time() 
#long running code here 
print "Time taken {}".format(time.time() - startTime) 

也請看timeit

如果實際倒計時你以後,你可以嘗試睡了n秒,直到你到90,像這樣:

timeTotal = 0 
timeResolution = 0.5 
waitUntil = 90 
while timeTotal < waitUntil: 
    time.sleep(timeResolution) 
    timeTotal += timeResolution 
    print "\r{} seconds left".format(waitUntil - timeTotal), 
+0

@ Zizouz212,剛剛編輯,這應該會更好。您可以設置時間分辨率以等待不同的時間以獲得更好的分辨率。 – MeetTitan

+0

我不知道第二個編輯是否回答我的問題。現在,我必須等待90秒才能導入模塊(爲什麼我要避免'time.sleep',因爲我相信它會暫停所有正在執行的代碼)。此外,它並不總是需要90秒,有時45,有時30.而且我正在尋找一個秒錶來記錄它導入模塊所用的時間,而不是倒數計時器或計時器......對此抱歉。 – Zizouz212

+0

把它放在一個單獨的線程中,所以你不要阻止導入:)如果你想記錄一個片段需要的時間,看看我的答案的頂部。這解釋了它。 – MeetTitan

1

如果數據線就足以顯示你的秒錶,如何通過使用'回車'字符「\ r」在控制檯上重寫一行?

以下代碼是簡單的倒數計時器在固定(不滾動)行顯示100到0。

import sys, time 
for num in range(100,0,-1): 
    sys.stdout.write("\r \r%d" % num) 
    sys.stdout.flush() 
    time.sleep(1) 

重點是,先寫空白然後寫出你想要的數據。

在上面的代碼中,「\ r」是空白部分,「\ r%d」是數據部分。