Измерить время, прошедшее в Python? - PullRequest
918 голосов
/ 10 сентября 2011

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

import timeit

start = timeit.timeit()
print "hello"
end = timeit.timeit()
print end - start

Ответы [ 26 ]

4 голосов
/ 19 июня 2017

Вы можете использовать timeit.

Вот пример того, как проверить naive_func, который принимает параметр, используя Python REPL:

>>> import timeit                                                                                         

>>> def naive_func(x):                                                                                    
...     a = 0                                                                                             
...     for i in range(a):                                                                                
...         a += i                                                                                        
...     return a                                                                                          

>>> def wrapper(func, *args, **kwargs):                                                                   
...     def wrapper():                                                                                    
...         return func(*args, **kwargs)                                                                  
...     return wrapper                                                                                    

>>> wrapped = wrapper(naive_func, 1_000)                                                                  

>>> timeit.timeit(wrapped, number=1_000_000)                                                              
0.4458435332577161  

Вам не нужна функция-обертка, если функция не 'не имеет никаких параметров.

3 голосов
/ 14 июня 2019

Чтобы получить рекурсивное представление о каждом вызове функции, выполните:

%load_ext snakeviz
%%snakeviz

Он просто берет эти 2 строки кода в блокноте Jupyter и создает красивую интерактивную диаграмму. Например:

enter image description here

Вот код. Опять же, две строки, начинающиеся с %, являются единственными дополнительными строками кода, необходимыми для использования snakeviz:

# !pip install snakeviz
%load_ext snakeviz
import glob
import hashlib

%%snakeviz

files = glob.glob('*.txt')
def print_files_hashed(files):
    for file in files:
        with open(file) as f:
            print(hashlib.md5(f.read().encode('utf-8')).hexdigest())
print_files_hashed(files)

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

2 голосов
/ 08 июля 2019

Сейчас 2019 год. Давайте сделаем это кратким способом:

from ttictoc import TicToc
t = TicToc() ## TicToc("name")
t.tic();
# your code ...
t.toc();
print(t.elapsed)

Преимущества использования этого подхода вместо других:

  1. Кратко и просто. программисту не требуется писать дополнительные переменные, такие как:
    t1 = время ()
    t2 = время ()
    прошло = t2 - t1
  2. С вложением
t = TicToc(nested=True)
t.tic()
some code1...
t.tic()
some code2...
t.tic()
some code3...
print(t.toc()) # Prints time for code 3 
print(t.toc()) # Prints time for code 2 with code 3
print(t.toc()) # Prints time for code 1 with code 2 and 3
  1. Сохраните имена вашего тиктока.
t = TicToc("save user")
print(t.name)

Пожалуйста, обратитесь к этой ссылке для более подробных инструкций.

0 голосов
/ 28 ноября 2018

В дополнение к %timeit в ipython вы также можете использовать %%timeit для фрагментов кода из нескольких строк:

In [1]: %%timeit
   ...: complex_func()
   ...: 2 + 2 == 5
   ...:
   ...:

1 s ± 1.93 ms per loop (mean ± std. dev. of 7 runs, 1 loop each)

Также его можно использовать в блокноте Юпитера таким же образом, просто поместите magic %%timeit в начале ячейки.

0 голосов
/ 21 октября 2018

Лучше использовать timeit просто: (он запускает несколько прогонов для одной и той же команды и дает вам результаты).

Пример приведен ниже:

%timeit import pandas as pd
0 голосов
/ 17 июня 2018

Единственное, о чем я могу думать, это использовать time.time().

import time
start = time.time()
sleep(5) #just to give it some delay to show it working
finish = time.time()
elapsed = finish - start
print(elapsed)

Надеюсь, что это поможет.

...