다음과 같은 스크립트를 사용하여 여러 개의 수면 기능에 대한 실제 경과 시간을 측정했습니다. 나는 프로그램을 멈추기 위해 time.sleep()을 사용한다. 또는 더 정확하게 말하면 고해상도 타이머를 사용하는 psychopy.core.wait()를 사용한다. wait() 함수가 문제를 일으키는 것으로 보입니다 (예 : 프로그램을 꼭 멈추어야하는 것보다).Python time.clock() 결과가 정확하지 않음.
from psychopy import core
import time
import scipy
import sys
times1 = []
times2 = []
times3 = []
times4 = []
testtime = 40 # Time to wait (40 ms)
n = 200 # Iterations
print "Starting timing test with", testtime, "ms as reference; running", n, "times."
for i in range(n):
t1 = time.time()
time.sleep(testtime/1000.0)
measurement = (time.time()-t1)*1000
times1.append(measurement)
time.clock()
time.sleep(testtime/1000.0)
measurement = time.clock()
times2.append(measurement)
t1 = time.time()
core.wait(testtime/1000.0)
measurement = (time.time()-t1)*1000
times3.append(measurement)
t1 = time.clock()
core.wait(testtime/1000.0)
measurement = time.clock()
times4.append(measurement)
if i%60==0:
sys.stdout.write(".")
print
print "Low precision with time.sleep()"
print "Average is", scipy.mean(times1)
print "StdDev is", scipy.std(times1)
print
print "High precision with time.sleep()"
print "Average is", scipy.mean(times2)
print "StdDev is", scipy.std(times2)
print
print "Low precision with PsychoPy core.wait()"
print "Average is", scipy.mean(times3)
print "StdDev is", scipy.std(times3)
print
print "High precision with PsychoPy core.wait()"
print "Average is", scipy.mean(times4)
print "StdDev is", scipy.std(times4)
내가 얻을 출력은 그러나입니다 :
Starting timing test with 40 ms as reference; running 200 times.
....
Low precision with time.sleep()
Average is 39.0950024128
StdDev is 7.77598671811
High precision with time.sleep()
Average is 16.2315164609
StdDev is 9.24644085289
Low precision with PsychoPy core.wait()
Average is 40.830000639
StdDev is 21.7002567107
High precision with PsychoPy core.wait()
Average is 16.3130358691
StdDev is 9.24395572035
time.clock에 의해 반환되는 시간은() 너무 낮습니다! 그리고 이것은 우리가 여기있는 여러 시스템에서 일관되게 발생합니다.
여기에서 무슨 일이 벌어지고 있는지 그리고이 문제를 일으킬 수있는 사람이 있습니까?
python3.3 +에서는 'time.perf_counter'를 사용하여 고해상도 타이머에 액세스 할 수 있습니다. – Bakuriu