Принудительное время для автоматического выбора количества выполнений оператора
В командной строке я могу сделать:
python -m timeit 'a = 1'
Согласно документам:
Если -n не задано, подходящее количество циклов рассчитывается путем попытки последовательных степеней 10, пока общее время не станет равным как минимум 0,2 секундам.
Это прекрасно работает, но как я могу получить такое же поведение при использовании timeit
в моей программе? Если я пропущу number
аргумент timeit.timeit
вызов будет просто по умолчанию 1000000
,
2 ответа
Решение
Документы не дают понять, что такая функциональность существует, я предполагаю, что ее нет. К счастью, определить оболочку, которая сделает это за вас, не так уж сложно:
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
Вот альтернатива написанию оболочки:
import subprocess
import sys
subprocess.call([sys.executable, '-m', 'timeit', stmt])