2013-09-25 4 views
1

다음과 같은 스크립트를 사용하여 여러 개의 수면 기능에 대한 실제 경과 시간을 측정했습니다. 나는 프로그램을 멈추기 위해 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에 의해 반환되는 시간은() 너무 낮습니다! 그리고 이것은 우리가 여기있는 여러 시스템에서 일관되게 발생합니다.

여기에서 무슨 일이 벌어지고 있는지 그리고이 문제를 일으킬 수있는 사람이 있습니까?

+0

python3.3 +에서는 'time.perf_counter'를 사용하여 고해상도 타이머에 액세스 할 수 있습니다. – Bakuriu

답변

1

수면을 취하기 전에 시계의 값을 저장하고 측정 값을 빼기 위해 시계의 값을 저장하십시오. time.time()의 경우와 동일하게 수행해야합니다. 모든 시계 값은 프로세스가 시작된 이후의 측정 시간입니다.

+0

고마워, 그래도 time.clock()은 마지막 호출 이후 시간을 반환하고 내부 타이머를 0으로 재설정합니다. –

관련 문제