Получить более точный таймер в Python - PullRequest
0 голосов
/ 25 марта 2011

Учитывая этот пример кода:

start = time.clock()

while (abs(x**2 - userInput) > epsilon):

    x = 0.5 * (x + (userInput/x))
    count = count+1

end = time.clock()

print(end-start)

И учитывая, что эта операция занимает очень мало времени, как я могу получить более точный таймер?

Я смотрел на timeitмодуль, но не мог понять, как его использовать или это то, что я хочу.

Ответы [ 2 ]

2 голосов
/ 25 марта 2011

Использовать время просто.Экземпляр Timer принимает две строки, первая из которых содержит операции со временем, а вторая содержит операции настройки, которые выполняются один раз до начала синхронизации.Следующий код должен работать, просто измените значения переменных на то, что вы хотите.

import math
import time
from timeit import Timer

userInput = "0"

while not userInput.isdigit() or int(userInput) <= 0:

    userInput = input("Calcular la raiz de: ") #Get input from user (userInput)

userInput = int(userInput)

epsilon = 0.000001
x=1
count=0

setup = 'from __main__ import userInput, epsilon, x, count'

operations = '''
x = 1
count = 0
while (abs(x**2 - userInput) > epsilon):

    x = 0.5 * (x + (userInput/x))
    count = count+1
'''

print('The operations took %.4f microseconds.' % Timer(operations, setup).timeit(1))

#run the operations again to get the x and count values
x = 1
count = 0
while (abs(x**2 - userInput) > epsilon):

    x = 0.5 * (x + (userInput/x))
    count = count+1
print("La raíz de", userInput, "es:",x,"implicó",count,"intentos")

Это выполнит ваш код по умолчанию миллион раз и вернет общее время в секундах, которое потребовалось для запуска.Вы можете запустить его разное количество раз, передав число в timeit().

0 голосов
/ 25 марта 2011

Я не сравнивал этот способ с timeit, но иногда я использую вычитания даты и времени для быстрого и грязного времени.Когда я вернусь домой, я проведу несколько тестов и сравню.

import datetime

x = 1
count = 0
userInput = 1
epsilon = 1

start = datetime.datetime.now()

while (abs(x**2 - userInput) > epsilon):
    x = 0.5 * (x + (userInput/x))
    count = count+1

print datetime.datetime.now() - start, "s"

Результаты:

0:00:00.000011 s
...