2014-09-21 3 views
0

파이썬에서 첫 번째 프로그램 작성을 마쳤습니다. 하나의 모듈에 모든 함수를 작성했습니다. 이제는 인수로 입력 파일을 제공하여 명령 줄에서 실행했습니다. 하지만 큰 데이터 세트를 주면 내 프로그램이 계속 실행됩니다. 이제 다음 단계는 모듈에서 더 많은 시간이 걸리는 기능을 찾는 것입니다. 전체 프로그램에 걸린 시간을 얻을 수는 있지만 각 기능을 별도로 필요로합니다.모든 함수에 대한 파이썬 시간 측정

나는 파이썬으로 timeit과 profile 모듈을 이해하려고 노력했지만, 내 이해에 따르면, 그들은 특정 기능에 걸리는 시간을 주었다. 내 모듈의 각 함수가 통계로 취한 시간을 알 수있는 방법이 있습니까 (한번에)?

미리 감사드립니다.

+1

[* this *] (http://stackoverflow.com/a/4299378/23771)을 시도하십시오. –

답변

6

(이 경우 '갑'에서)

python -m profile -s time file.py 

또는

python -m cProfile -s time file.py 

이 두 번째가 빠를 수 있습니다 실행, 결코 나쁘다. 왼쪽이 기능을 포함

Ordered by: internal time 

    ncalls tottime percall cumtime percall filename:lineno(function) 
     39 0.132 0.003 0.139 0.004 :0(load_dynamic) 
     239 0.097 0.000 0.097 0.000 :0(loads) 
    541/1 0.083 0.000 3.556 3.556 :0(exec) 
     30 0.082 0.003 0.082 0.003 :0(statusBar) 
         ... etc ... 

:

이 뭔가를 줄 것이다.

+0

이 오류를 얻고 있습니다 -> "/usr/lib/python3.4/runpy.py", 줄 170, _run_module_as_main "__main__", mod_spec) _run_code의 파일 "/usr/lib/python3.4/runpy.py" exec (code, run_globals) 파일 "/usr/lib/python3.4/profile. py ", line 589, main() 파일"/usr/lib/python3.4/profile.py ", 줄 575, 주 에서 코드 = compile (fp.read(), progname, 'exec') 파일 "/home/****/eclipseworkspace/abcd.py", 줄 20 인쇄 '% r (% r, % r) % 2.2f 초'% \ –

+0

'파이썬 ​​파일 .py'? – Veedrac

+0

또한,'python -V'는 무엇을 말합니까? "Python 2"로 시작해야합니다. – Veedrac

1

먼저 나는이 목표 시간에 파이썬 코드의 작은 비트를 간단한 방법을 제공 .timeit에 대한 profilers 모듈 또는 timeit를 사용하는 것이 좋습니다! 하나의 인자를받는 함수를 프로파일에

, 당신은 할 수 있습니다 :

import time             

def measure_time(f): 

    def timed(*args, **kw): 
    ts = time.time() 
    result = f(*args, **kw) 
    te = time.time() 

    print '%r (%r, %r) %2.2f sec' % \ 
      (f.__name__, args, kw, te-ts) 
    return result 

return timed 
:

import cProfile 
import re 
cProfile.run('re.compile("foo|bar")') 

또한 당신은 당신이 전용 방법의 실행 시간을 측정 할 수 있도록이 같은 Decorator 사용할 수 있습니다

이처럼 사용할 수 있습니다

@measure_time 
    def foo(): 
     #content of function 

참고을 그함수 이름을 반환하십시오! 터미널에

+0

죄송합니다. 전에 본 적이 없습니다. 그래서, 내 프로그램의 시작 부분에이 measure_time 함수를 추가하고 모든 함수 앞에 @measure_time을 추가해야합니까? 내가 맞습니까? –

+0

전체 프로그램에 대해 프로필 또는 시간대를 사용할 수 있습니까? 그리고 그것은 모든 기능을 수행하는데 걸리는 시간을 제공합니까, 아니면 한 번 기능을 수행하는데 걸린 시간을 찾는데 사용해야합니까? –

+1

당신은 당신의'.py'에서 함수를 정의하고'@ measure_time'을 사용하여 그 런타임을 찾을 수있는 모든 함수를 필요로합니다! – Kasramvd