2011-01-18 10 views
6

を実行してきた>時間は、私は一度に数時間までのために実行されるループを持っています。私はそれが一定の間隔でどのくらいの間それを教えてもらえますか?のpython - whileループは

ただ、一般的な...質問

EDIT:それは順列を実行whileループですので、私はそれが10秒ごとに実行している時間を印刷することができますか?

答えて

8

代わりのループごとに時間をチェックし、あなたは

import time 
from threading import Timer 

def timeout_handler(timeout=10): 
    print time.time() 
    timer = Timer(timeout, timeout_handler) 
    timer.start() 

timeout_handler() 
while True: 
    print "loop" 
    time.sleep(1) 
+1

+1私の答えよりもかなり良い、Pythonはそのような電池が含まれていることを愛する。 – fmark

1

time.asctime()を使用してこれを行うには非常にハック方法があります。 whileループに入る前とループ自体のどこかにasctimeを格納します。保存された時間と現在の時間との間の時間差を計算し、その差が10秒であれば、保存された時間を現在の時間に更新し、それが実行されていることを印刷する。

しかし、それはそれは、いくつかのツイストと退屈な数学を必要としてそれを行うには非常にハック方法です。

あなたの目的は、特定のアルゴリズムの実行時間を確認することであるならば、あなたはこれが

述べたように
2

を支援

希望timeitモジュールを使用した方がいいでしょうが、これは厄介なハックの少しありますそれは、繰り返しのたびに時間をチェックする必要があるからです。それが機能するためには、わずかな時間だけ実行されるタスクが必要です。ループが1分ごとに繰り返し実行される場合は、10秒ごとに出力されません。中断したい場合は、マルチスレッド、またはlinux/mac/unixシグナルを使用している方がよいでしょう。あなたのプラットフォームは何ですか?

import time 

timeout = 10 
first_time = time.time() 
last_time = first_time 
while(True): 
    pass #do something here 
    new_time = time.time() 
    if new_time - last_time > timeout: 
     last_time = new_time 
     print "Its been %f seconds" % (new_time - first_time) 

出力:

Its been 10.016000 seconds 
Its been 20.031000 seconds 
Its been 30.047000 seconds 
+0

がohmygosh私はあなたを愛しているけれど、 'pass'は何をするのでしょうTimerオブジェクトを使用できますか?私はそれの代わりに何かを置くのですか? – tekknolagi

+1

'pass'はnull演算ですが、これは単なるプレースホルダであり、まったく何もしません([実際には(http://docs.python.org/reference/simple_stmts.html#pass)])。それを自分のコードに置き換えてください。 – fmark

+1

ええと、私は 'Timer'オブジェクトについて知らなかったので、以下の答えでそれを使うことに変えてみることをお勧めします。 – fmark