2017-01-17 9 views
0

私はループし、tkinterで追加した時間を含めてどれくらいの時間がかかるかを測定したいのです。私はこれらの行を私のループ関数の最後に追加しました。tkinter python.afterでfps(経過時間)を測定する方法は?

.afterの値に基づいて時間の変化量がわかるはずですが、25または5025に設定しても、同じ基本的な結果が得られます。また、ループの始めにtime2=ステートメントを入れてから、printとtime2=ステートメントの位置を入れ替えて実験しました。

位置が異なると若干異なる結果が得られますが、そのうちのどれも、時間が追加されていることは明らかです(コードの残りの部分に基づいて)が表示されますが、.after値の追加時間は表示されません。

私は明らかに「測定」問題があります。私が把握していない重要な知識がありますか?

print time.clock() - time2[0]  
time2[0] = time.clock()  
root.after(5025, myloop) 
+1

あなたは 'after'が実行される前と' myloop'が実行される前に時間を測定しますので、間違った結果を得なければなりません。このコードは答えるには不十分であるため、動作例が少なくて済みます。 – furas

+0

BTWで '5025'を実行すると、' 1000/5025' FPS(約0.199FPS)が得られるはずですが、 'myloop'にコマンドで使用された時間を追加する必要があります。 '' 1000 /(5025 + time_in_myloop) 'FPS – furas

+1

time.clock()はPython 3.3では廃止予定です - process_time()を使うべきです しかし、イベントドリブンの経過時間をキャプチャしようとすると、 .time()の代わりに、time.clock()とprocess_time()はPythonの行を実行するのに必要なCPU時間を測定します。 –

答えて

2

上記のあなたのコメントをもとに、あなたはそうのような経過時間の機能を達成することができます

import time 

def get_elapsed_time() 
    startTime = time.time() 
    my_loop() 
    endTime = time.time() 

    elapsedTime = endTime - startTime 
    print elapsedTime 

time.time()が1であるLinuxのエポック、以来、時間の経過を表し、/1/1970 - 続きを読む:https://en.wikipedia.org/wiki/Unix_time

したがって、上記の関数は、my_loop()関数の最後にある "Linux Universal Time"にstartTimeを設定しますそれはendTimeを "Linux Universal Time"に設定します。 endTimestartTimeの違いは、get_elapsed_time()関数が呼び出されてから終了するまでの時間の経過を表します。これは、my_loop()関数が終了した後のマイクロ秒です。効果的に、これはあなたのmy_loop()機能が動作していた時間を表示します。

+0

これは、参照している関数my_loop()が時間がかかると仮定しています –

+0

測定を行うために別の関数を使用することをお勧めしますか?私はそれを試すことがありますが、私が測定しようとしている関数はループする必要があります。そして、どの要素が最も多く時間を追加しているかを評価するために、各ループスルーがどれくらい時間がかかるかについて、一度に1つのループを測定することは困難です。しかし、なぜ私が取ったアプローチが最初にうまくいかなかったのか、本当に興味があります。 – chmedly

関連する問題