2012-06-04 4 views
11

timeit 함수를 사용하여 함수 결과와 동시에 처리하는 데 걸린 시간을 출력하는 방법이 있습니까?Python timeit 및 program output

지금 내가

timer = Timer('func()', 'from __main__ import func') 
print timer.timeit(1) 

을 사용하고 그러나 이것은 단지 끝에서 뭔가를 반환하는 프로그램 출력을, 시간을 출력하지.

FuncOutputGoesHere 13.2897528935 

같은 줄에 출력하고 싶습니다.

이상적으로는, 나는 그것을 N 번 실행 한 다음 프로그램 결과 및 평균 시간

+0

timeit을 추천하는 사람들과 time.time()을 추천하는 사람들 사이에는 많은 편차가있는 것처럼 보입니다. 어떤게 더 좋아? – MyNameIsKhan

+0

'timeit'은 당신이'time.clock' (더 정확하게)을 사용할 윈도우가 아니라면'time.time()'을 사용합니다. –

+0

그래서 timeit이 나에게 가장 정확한 것을 알려줄 것입니까? – MyNameIsKhan

답변

13

두 가지 옵션 (전체 하나 개의 출력 총)을 출력하여 프로그램의 평균을 취할 수 있도록하고 싶습니다 :

  1. 타임 코드에 '인쇄'를 포함하십시오. 추악한,하지만 헤이. 당신이 모두가 한 번 함수를 실행하면

    timer = Timer('print func()', 'from __main__ import func') 
    print timer.timeit(1) 
    
  2. , 다음 timeit 모두 모듈과 시간 분배 직접 같은 방법을 사용하여 코드 :

    import sys 
    import time 
    
    if sys.platform == "win32": 
        # On Windows, the best timer is time.clock() 
        default_timer = time.clock 
    else: 
        # On most other platforms the best timer is time.time() 
        default_timer = time.time 
    
    t0 = default_timer() 
    output = func() 
    t1 = default_timer() 
    print output, t1 - t0 
    

당신이 실행하려는 경우를 코드를 여러 번 생성하고 출력을 생성하면 왜 코드를 한 번 실행하지 마십시오 바깥 쪽 timeit 함수는? 어쨌든 한 번 이상 호출해야합니다.

timer = Timer('func()', 'from __main__ import func') 
    print timer.timeit(100), 
    print func() 
+0

감사합니다. 이것은 매우 유용합니다. –

0

timeit 모듈은 전달 된 문을 실행합니다. 당신은 함수의 결과를 출력 할 수 있습니다 :

timer = Timer('print func()', 'from __main__ import func') 
print timer.timeit(1) 
+1

이것은 백만 번 인쇄되거나 종종 명령문이 실행되고 I/O 오버 헤드를 타이밍으로 계산합니다. – delnan

+0

@delnan : 그는 timer.timeit (1)을 실행합니다. :-P –

+0

@MartijnPieters 여러 번 출력하지 않고 여러 번 실행하는 방법을 모르겠습니다. 또한 결과가 집계되는 것처럼 보이기 때문에 런타임의 수로 결과를 나눌 필요가 있다고 생각합니다. 한 번 평균을 내고 출력하려면 몇 번 실행하는 것이 이상적입니다. – MyNameIsKhan