수색…


IPython의 %% timeit 및 % timeit

프로파일 링 문자열 concatanation :

In [1]: import string

In [2]: %%timeit s=""; long_list=list(string.ascii_letters)*50
  ....: for substring in long_list:
  ....:   s+=substring
  ....:
1000 loops, best of 3: 570 us per loop

In [3]: %%timeit long_list=list(string.ascii_letters)*50
  ....: s="".join(long_list)
  ....:
100000 loops, best of 3: 16.1 us per loop

반복 가능 및 목록에 대한 루프 프로파일 링 :

In [4]: %timeit for i in range(100000):pass
100 loops, best of 3: 2.82 ms per loop

In [5]: %timeit for i in list(range(100000)):pass
100 loops, best of 3: 3.95 ms per loop

timeit () 함수

배열 요소의 반복 프로파일 링

>>> import timeit
>>> timeit.timeit('list(itertools.repeat("a", 100))', 'import itertools', number = 10000000)
10.997665435877963
>>> timeit.timeit('["a"]*100', number = 10000000)
7.118789926862576

timeit 명령 줄

숫자의 연결성 프로파일 링

python -m timeit "'-'.join(str(n) for n in range(100))"
10000 loops, best of 3: 29.2 usec per loop

python -m timeit "'-'.join(map(str,range(100)))"
100000 loops, best of 3: 19.4 usec per loop

명령 행의 line_profiler

프로파일 링하고자하는 함수 앞에 @profile 지시어가있는 소스 코드 :

import requests

@profile
def slow_func():
    s = requests.session()
    html=s.get("https://en.wikipedia.org/").text
    sum([pow(ord(x),3.1) for x in list(html)])
        
for i in range(50):
    slow_func()

kernprof 명령을 사용하여 프로파일 링을 라인 단위로 계산

$ kernprof -lv so6.py

Wrote profile results to so6.py.lprof
Timer unit: 4.27654e-07 s

Total time: 22.6427 s
File: so6.py
Function: slow_func at line 4

Line #      Hits         Time  Per Hit   % Time  Line Contents
==============================================================
     4                                           @profile
     5                                           def slow_func():
     6        50        20729    414.6      0.0      s = requests.session()
     7        50     47618627 952372.5     89.9      html=s.get("https://en.wikipedia.org/").text
     8        50      5306958 106139.2     10.0      sum([pow(ord(x),3.1) for x in list(html)])

페이지 요청은 페이지의 정보를 기반으로하는 계산보다 거의 항상 느립니다.

cProfile (기본 설정 프로파일 러) 사용

파이썬에는 cProfile이라는 프로파일 러가 있습니다. 일반적으로 timeit을 사용하는 것보다 선호됩니다.

그것은 전체 스크립트를 분해하고 스크립트의 각 메소드에 대해 다음과 같이 알려줍니다.

  • ncalls : 메소드가 호출 된 횟수
  • tottime : 주어진 함수에서 소비 된 총 시간 (하위 함수 호출 시간 제외)
  • percall : 호출 당 소요 된 시간. 또는 tottime을 ncalls로 나눈 몫
  • cumtime :이 하위 함수와 모든 하위 함수 (호출에서 종료까지)에 소비 된 누적 시간. 이 수치는 재귀 함수에서도 정확합니다.
  • percall : cumtime을 원시 호출로 나눈 몫
  • filename:lineno(function) : 각 함수의 각 데이터를 제공합니다.

cProfiler는 다음을 사용하여 Command Line에서 쉽게 호출 할 수 있습니다.

$ python -m cProfile main.py 

메서드에서 취한 시간까지 반환 된 프로파일 링 된 메서드 목록을 정렬하려면 :

$ python -m cProfile -s time main.py 


Modified text is an extract of the original Stack Overflow Documentation
아래 라이선스 CC BY-SA 3.0
와 제휴하지 않음 Stack Overflow