2012-04-24 1 views
2

В командной строке, я могу сделать:Принуждение timeit автоматически выбрать количество раз выполняется оператор

python -m timeit 'a = 1' 

Согласно документации:

Если -n не задана, подходящая количество циклов рассчитывается путем попытки последовательных полномочий из 10 до тех пор, пока общее время составит не менее 0,2 секунды.

Это отлично работает, но как я могу получить то же поведение при использовании timeit в моей программе? Если я оставил аргумент number для вызова timeit.timeit, он просто по умолчанию будет 1000000.

ответ

4

Документы не делают очевидным, что существует такая функциональность, я предполагаю, что нет. К счастью, определение обертку, которая делает это для вас это не так уж трудно:

import timeit 

def auto_timeit(stmt='pass', setup='pass'): 
    n = 1 
    t = timeit.timeit(stmt, setup, number=n) 

    while t < 0.2: 
     n *= 10 
     t = timeit.timeit(stmt, setup, number=n) 

    return t/n # normalise to time-per-run 
1

Вот альтернатива писать обертку:

import subprocess 
import sys 

subprocess.call([sys.executable, '-m', 'timeit', stmt]) 
+0

Почему этот ответ downvoted? Я не вижу никаких очевидных проблем с этим. – max

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