반응형
Python cProfile 튜토리얼! (feat. 함수 별 소요시간 파악하기)
cProflie을 활용함으로써 print time으로 타임 프린트 찍지 않고 함수 별 소요 시간을 알아보자. cProfile 내에서 함수를 실행하면 함수별 소요시간을 간단히 확인할 수 있다.
Required Libraires (필요 라이브러리)
1) time
2) cProflie
https://docs.python.org/3/library/profile.html
3) pstats
cProfiles이란
- cProfile 및 프로필은 Python 프로그램의 결정론적 프로파일링을 제공합니다. 프로필은 프로그램의 다양한 부분이 실행되는 빈도와 기간을 설명하는 일련의 통계입니다. 이러한 통계는 pstats 모듈을 통해 보고서로 형식화할 수 있습니다.
Install Libraries (라이브러리 설치하기)
1
2
|
pip install cProflie
pip install pstats
|
cs |
Importing Libraries (라이브러리 임포트하기)
1
2
3
|
import cProflie
import pstats
import time
|
cs |
무작위 함수를 여러 개 작성한다. 함수 별 소요 시간을 확인하기 위함이다.
1) add 함수
- 두 개의 매개변수의 합을 반환하는 함수
2) fact 함수
- 매개변수 n의 팩토리얼을 반환하는 함수
3) do_stuff() 함수
- 0부터 999,999까지의 각 숫자의 제곱 값을 포함하는 리스트를 반환하는 함수
4) waste_time() 함수
- 5초 sleep하고 Hello를 출력하는 함수
각 함수 별 소요시간은 어떻게 될까?
1
2
3
4
5
|
with cProfile.Profile() as profile:
print(add(100, 5000))
print(fact(70000))
print(do_stuff())
waste_time()
|
cs |
cProfile 안에서 함수들을 실행시키자.
기왕이면 프로그램이 실행될 때 자동적으로 모든 것이 실행될 수 있도록 만들자 using magic function in Python.
1
2
3
4
5
6
|
if __name__ == "__main__":
with cProfile.Profile() as profile:
print(add(100, 5000))
print(fact(70000))
print(do_stuff())
waste_time()
|
cs |
함수 별 소요시간을 확인하기 위해 stats을 출력하자.
1
2
3
|
results = pstats.Stats(profile)
results.sort_stats(pstats.SortKey.TIME)
results.print_stats()
|
cs |
결과
waste_time 함수가 5초로 가장 많은 시간을 소비했다.
Full Code
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
|
import cProfile
import pstats
import time
def add (x,y):
resulting_sum = 0
resulting_sum += x
resulting_sum += y
return resulting_sum
def fact(n):
result = 1
for i in range(1, n+1):
result *= i
return result
def do_stuff():
result = []
for x in range(1000000):
result.append(x**2)
return result
def waste_time():
time.sleep(5);
print("Hello")
if __name__ == "__main__":
with cProfile.Profile() as profile:
print(add(100, 5000))
print(fact(70000))
print(do_stuff())
waste_time()
results = pstats.Stats(profile)
results.sort_stats(pstats.SortKey.TIME)
results.print_stats()
|
cs |
반응형
'공부 > 파이썬 Python' 카테고리의 다른 글
HTTPX로 웹 크롤링 10배 빠르게 하기 (1) | 2023.01.14 |
---|---|
파이썬 스케줄작업 생성하기 (Python schedule) (2) | 2023.01.12 |
Python으로 PC 볼륨 조절하기 (1) | 2023.01.11 |
Python의 간단한 UDP 채팅방 만들기 (1) | 2022.06.30 |
Python에서 워드 파일 처리하기ㅣDocumentㅣdocxㅣWord File Processing in Python (0) | 2022.06.25 |
댓글