2016-10-12 2 views
0

Я пытаюсь измерить время, необходимое для запуска блока команд в Python, но я не хочу, чтобы писать такие вещи, как:Временные блоки кода - Python

start = time.clock() 
... 
<lines of code> 
... 
time_elapsed = time.clock() - start 

Вместо этого я хочу знать, если есть способ, я могу отправить блок инструкций в качестве параметра функции, которая возвращает время, прошедшее, как

time_elapsed = time_it_takes(<lines of code>) 

реализация этого метода может быть что-то вроде

def time_it_takes(<lines of code>): 
    start = time.clock() 
    result = <lines of code> 
    return (result, time.clock() - start) 

Кто-нибудь знает, есть ли способ сделать это? Заранее спасибо.

ответ

0

python -m cProfile myscript.py Он предоставляет полный журнал о потреблении времени методами.

0

Если вы используете IPython, и это хорошая вещь, чтобы сделать, и вы можете построить свой код, чтобы быть в одной строке, то есть вызов функции:

%timeit your-code 

Это было удобно для меня. Надеюсь, поможет.

4

Это было бы полезно использовать декоратор. Вы можете написать декоратор, который делает это, как этот

import time 

def timer(func): 
    def wrapper(*args, **kwargs): 
     start = time.time() 
     func(*args, **kwargs) 

     print('The function ran for', time.time() - start) 
    return wrapper 


@timer 
def just_sleep(): 
    time.sleep(5) 

just_sleep() 

Выход

The function ran for 5.0050904750823975 

, а затем вы можете украсить любую функцию, которую вы хотите время с @timer, и вы можете также сделать некоторые другие модные вещи внутри декоратора , Как если функция баллотировался более 15 секунд, сделать что-то ... еще делают другое

Примечание: Это не самый точный способ измерения времени выполнения функции в Python

0

Вы можете построить ваш собственный менеджер контекста на время относительно длинных бит кода.

import time 

class MyTimer(object): 

    def __enter__(self): 
     self.start = time.clock() 
     return self 

    def __exit__(self, typ, value, traceback): 
     self.duration = time.clock() - self.start 

with MyTimer() as timer: 
    time.sleep(3) 
print(timer.duration) 

Но будьте осторожны с тем, что вы измеряете. В Windows time.clock - это высокое разрешение настенных часов, но в Linux - время работы процессора.

Смежные вопросы