Принудительное время для автоматического выбора количества выполнений оператора

В командной строке я могу сделать:

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])
Другие вопросы по тегам