Как измерить время между строками кода в python?

Таким образом, в Java мы можем сделать, как измерить время, выполняемое функцией для выполнения

Но как это делается на питоне? Чтобы измерить время начала и окончания времени между строками кодов? Что-то, что делает это:

import some_time_library

starttime = some_time_library.some_module()
code_tobe_measured() 
endtime = some_time_library.some_module()

time_taken = endtime - starttime

Ответ 1

Если вы хотите измерить процессорное время, можете использовать time.process_time() для Python 3.3 и выше:

import time
start = time.process_time()
# your code here    
print(time.process_time() - start)

Первый звонок включает таймер, а второй звонок сообщает, сколько секунд прошло.

Существует также функция time.clock(), но она устарела начиная с Python 3.3 и будет удалена в Python 3.8.

Существуют лучшие инструменты для профилирования, такие как timeit и profile, однако этот будет измерять время процессора, и именно об этом вы и просите.

Если вы хотите измерить время настенных часов, используйте time.time().

Ответ 2

Вы также можете использовать библиотеку import time:

start = time.time()
   #your code
end = time.time()
time_taken = end - start
print('Time: ',time_taken)

Ответ 3

С помощью небольшого вспомогательного класса вы можете измерить время, проведенное в строках с отступом, например:

with CodeTimer():
   line_to_measure()
   another_line()
   # etc...

Который покажет следующее после завершения выполнения строки с отступом:

Code block took: x.xxx ms

ОБНОВЛЕНИЕ: Теперь вы можете получить класс с помощью pip install linetimer а затем from linetimer import CodeTimer. Смотрите этот проект GitHub.

Код для вышеуказанного класса:

import timeit

class CodeTimer:
    def __init__(self, name=None):
        self.name = " '"  + name + "'" if name else ''

    def __enter__(self):
        self.start = timeit.default_timer()

    def __exit__(self, exc_type, exc_value, traceback):
        self.took = (timeit.default_timer() - self.start) * 1000.0
        print('Code block' + self.name + ' took: ' + str(self.took) + ' ms')

Затем вы можете назвать блоки кода, которые хотите измерить:

with CodeTimer('loop 1'):
   for i in range(100000):
      pass

with CodeTimer('loop 2'):
   for i in range(100000):
      pass

Code block 'loop 1' took: 4.991 ms
Code block 'loop 2' took: 3.666 ms

И вкладывать их

with CodeTimer('Outer'):
   for i in range(100000):
      pass

   with CodeTimer('Inner'):
      for i in range(100000):
         pass

   for i in range(100000):
      pass

Code block 'Inner' took: 2.382 ms
Code block 'Outer' took: 10.466 ms

Что касается timeit.default_timer(), он использует лучший таймер, основанный на версии ОС и Python, см. Этот ответ.

Ответ 4

Я всегда предпочитаю проверять время в часах, минутах и секундах (% H:% M:% S):

from datetime import datetime
start = datetime.now()
# your code
end = datetime.now()
time_taken = end - start
print('Time: ',time_taken) 

выход:

Time:  0:00:00.000019