2013-09-25 3 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. –

Смежные вопросы