2017-06-05 68 views
2

所以我現在有蟒蛇打印了多長時間了功能對其做的東西,如運行後,運行:如何在函數運行時打印出當前運行時間?

import time 
t = time.time() 
# do something in here 
print "\n Time Taken: %.3f sec" % (time.time()-t) 

,但我想說明的是已經過去了的功能已經開始直播時間,我無法想出一個辦法來實現這一目標。

例如在終端我希望它這樣說:

Working on xFunction. Time Elapsed 72.485 sec... (live updated time) 
xFunction Has finished. 
Time Taken: 1152.546 sec 

任何幫助,將不勝感激。

+0

你可以用'os.fork()'爲它啓動一個新的線程。 –

+2

請注意,OP似乎需要經過時間的_live_顯示(正如標題已經表明的,但問題文本沒有)。 – handle

+1

或['threading'](https://docs.python.org/3/library/threading.html)。 – handle

回答

1

下面是一個線程的例子,它將打印自啓動以來已經過去了多少時間,並且可以從主循環中停止。

import time 
import threading 

class ElapsedTimeThread(threading.Thread): 
    """"Stoppable thread that prints the time elapsed""" 
    def __init__(self): 
     super(ElapsedTimeThread, self).__init__() 
     self._stop_event = threading.Event() 

    def stop(self): 
     self._stop_event.set() 

    def stopped(self): 
     return self._stop_event.is_set() 

    def run(self): 
     thread_start = time.time() 
     while not self.stopped(): 
      print("\rElapsed Time {:.3f} seconds".format(time.time()-thread_start), end="") 
      #include a delay here so the thread doesn't uselessly thrash the CPU 
      time.sleep(0.01) 

if __name__ == "__main__": 
    start = time.time() 
    thread = ElapsedTimeThread() 
    thread.start() 
    # do something 
    time.sleep(5) 
    # something is finished so stop the thread 
    thread.stop() 
    thread.join() 
    print() # empty print() to output a newline 
    print("Finished in {:.3f} seconds".format(time.time()-start)) 

這讓下面的輸出,與經過時間從零計數和被改寫:

J:\>python thr_time.py 
Elapsed Time 5.000 seconds 
Finished in 5.001 seconds 

注意,這個代碼是在Python 3.更多信息有關停止線程here & here

讓我知道你是否想要澄清任何部分。