как измерить выполнение с помощью try / except bad used - PullRequest
0 голосов
/ 09 мая 2020

Извините за мой английский sh. Мне нужен scrit, чтобы показать правильное использование try / за исключением Python. Я пробую верный и неправильный путь и жду большего времени выполнения неправильным способом, но я не могу этого доказать. Я начинаю с python. Я думаю, что только те строки, которые генерируют исключения, должны быть в блоке try, n = 1000000 не вызовет исключения, я знаю, но только для тестирования при тех же условиях. С уважением. Даниил

from time import time
#**************************
#Right use, I suppose
#**************************
start1=time()
try:
    n=1000000
except:
     print('Error en el ingreso')  
while n>=0: #out try is more fast?
       n-=1 #out try is more fast?
end1=time()#end mark good time
good=end1-start1
print('Time right used: {}'.format(good))
#**************************
#Wrong use, I suppose
#**************************
start2=time()
try: 
    n=1000000
    while n>=0:#in try is more slow?
       n-=1    #in try is more slow?
except:
    print('Error en el ingreso')         
end2=time()
bad=end2-start2#end mark bad time
print('Time wrong used: {}'.format(bad))

if bad>=good:
    print('Bad use take more time')
else:
    print('Good use take more time')

1 Ответ

0 голосов
/ 09 мая 2020

Некоторые примечания:

  • time.time() возвращает время «настенных часов». Это плохой показатель c для использования при тестировании кода. Вы хотите измерить, сколько времени потребовалось ЦП для завершения кода. Для этого вы можете использовать модуль timeit.
  • При тестировании попробуйте написать наименьший репрезентативный код, выполнение которого требует короткого времени, чтобы вы могли выполнять его много раз и брать среднее значение (используя timeit).

На примере:

from timeit import timeit

def loop_with_tryexcept():
    try:
        n = 10_000
        while n >= 0:
            n -= 1
    except:
        print("Error")

def loop_without_tryexcept():
    n = 10_000
    while n >= 0:
        n -= 1


"""
python -i test.py

>>> timeit('loop_with_tryexcept()', setup='from __main__ import loop_with_tryexcept', number=1000)
0.49678000000017164
>>> timeit('loop_without_tryexcept()', setup='from __main__ import loop_without_tryexcept', number=1000)
0.5228376000000026

# It seems a tiny bit faster. Or is it?


>>> timeit('loop_with_tryexcept()', setup='from __main__ import loop_with_tryexcept', number=1000)
0.4899204999999256
>>> timeit('loop_without_tryexcept()', setup='from __main__ import loop_without_tryexcept', number=1000)
0.4767956000000595

# Nope, it was just randomness introduced by the CPU.
"""

Вы можете видеть, что нет никакой разницы в скорости при переносе кода в блок try / except.

...