2017-10-02 8 views
0

테스트 스위트가 있으며 코드가 테스트 중입니다. 적절한 파일의 상단에 from memory_profiler import profile을 넣고 프로파일 링하고자하는 기능을 @profile으로 꾸며서 python TestThing.py이라는 표준 방식으로 실행하면 큰 행별로 결과가 나옵니다.어떻게 Python에서 unittests를 시간 프로파일 링 할 수 있습니까?

하지만 line_profiler는 이런 식으로 패키지에 포함되어 있지 않으며, 프로필을 작성할 수있는 유일한 방법은 kernprof -l -v thing.py입니다. 단위 테스트에서이 테스트를 사용하면 아무런 테스트도 실행되지 않고 (놀랄만한 일이 아닙니다.) 결과가 생성되지 않습니다. memory_profiler와 비슷한 방식으로 테스트와 코드를 시간 프로파일 링하는 방법은 무엇입니까? 물론

답변

0

, 당신은 import line_profiler 수 :

import line_profiler 

profiler = line_profiler.LineProfiler() 


@profiler 
def foo(): 
    for i in range(10): 
     print(i) 


foo() 

profiler.dump_stats('foo.lprof') 

결과는 foo.lprof에 저장됩니다.

또는, 당신이 호출 한 후 장식, 인쇄 결과와 같은 memory_profiler 포장 수 :이의 수정 노력하고 있습니다

def profile_and_show(func): 
    profiler = line_profiler.LineProfiler(func) 
    def _(*args, **kwargs): 
     try: 
      return func(*args, **kwargs) 
     finally: 
      lstats = profiler.get_stats() 
      line_profiler.show_text(lstats.timings, lstats.unit) 
    return _ 
+0

: 수입 line_profiler를, 다음 클래스의 정적 프로파일 = line_profiler.LineProfiler을 선언합니다. 그런 다음 @profiler를 사용하여 함수를 꾸미십시오. 그런 다음 해당 함수의 끝에서 ClassName.profiler.dump_stats ('method.lprof')를 호출하십시오. 그런 다음 python -m line_profiler method.lprof로 읽으십시오. 하지만이 구피 아닌가요? 나중에 제거해야 할 많은 코드를 코드에 추가하고 싶지 않습니다. 더 깨끗한 방법이 있습니까? – pvlkmrv

+0

어떤 부분이 깨끗하지 않습니까? – georgexsh

+0

memory_profiler의 경우 객체를 인스턴스화하거나 프로파일 링 된 함수가 실행 된 후 dump_stats 메소드를 호출하는 것에 대해 걱정할 필요가 없습니다. 이 시간 프로파일 링 방법으로 작업 할 수 있지만 필요 이상의 작업입니다. – pvlkmrv