반응형
25.1 프로파일링 (cProfile, timeit 모듈)
프로파일링은 프로그램의 성능 병목 지점을 식별하는 데 사용됩니다. 파이썬에서는 cProfile
과 timeit
모듈을 사용하여 프로파일링을 수행할 수 있습니다.
cProfile 모듈
기본 사용법
import cProfile
def slow_function():
total = 0
for i in range(1, 10000):
for j in range(1, 100):
total += i * j
return total
cProfile.run('slow_function()')
프로파일링 결과 저장
import cProfile
def slow_function():
total = 0
for i in range(1, 10000):
for j in range(1, 100):
total += i * j
return total
profiler = cProfile.Profile()
profiler.enable()
slow_function()
profiler.disable()
profiler.dump_stats('profile_data.prof')
프로파일링 결과 분석
import pstats
p = pstats.Stats('profile_data.prof')
p.sort_stats('cumulative').print_stats(10)
timeit 모듈
timeit
모듈은 코드의 실행 시간을 측정하는 데 사용됩니다.
기본 사용법
import timeit
def slow_function():
total = 0
for i in range(1, 10000):
for j in range(1, 100):
total += i * j
return total
execution_time = timeit.timeit(slow_function, number=1)
print(f'Execution time: {execution_time}')
25.2 메모리 관리 기법
파이썬에서 메모리 사용을 최적화하는 방법은 여러 가지가 있습니다.
객체 참조 제거
더 이상 필요하지 않은 객체에 대한 참조를 제거하여 메모리 누수를 방지합니다.
a = [1, 2, 3, 4, 5]
del a # a에 대한 참조 제거
제너레이터 사용
대량의 데이터를 처리할 때 메모리를 절약하기 위해 제너레이터를 사용합니다.
def generate_numbers(n):
for i in range(n):
yield i
for number in generate_numbers(1000000):
print(number)
메모리 프로파일링memory_profiler
모듈을 사용하여 메모리 사용을 프로파일링합니다.
pip install memory_profiler
from memory_profiler import profile
@profile
def slow_function():
total = 0
for i in range(1, 10000):
for j in range(1, 100):
total += i * j
return total
slow_function()
25.3 Cython을 사용한 성능 개선
Cython은 파이썬 코드를 C로 컴파일하여 성능을 개선할 수 있는 도구입니다.
Cython 설치
pip install cython
기본 사용법
example.pyx
파일 생성
def slow_function():
total = 0
for i in range(1, 10000):
for j in range(1, 100):
total += i * j
return total
setup.py
파일 생성
from setuptools import setup
from Cython.Build import cythonize
setup(
ext_modules=cythonize("example.pyx"),
)
Cython 모듈 컴파일
python setup.py build_ext --inplace
사용 예
import example
result = example.slow_function()
print(result)
25.4 JIT 컴파일러 (PyPy)
PyPy는 Just-In-Time(JIT) 컴파일러를 사용하여 파이썬 코드를 더 빠르게 실행할 수 있는 대체 인터프리터입니다.
PyPy 설치
PyPy는 공식 웹사이트(https://www.pypy.org/)에서 다운로드할 수 있습니다.
PyPy 사용
PyPy를 사용하여 파이썬 스크립트를 실행하면 JIT 컴파일을 통해 성능이 개선됩니다.
pypy my_script.py
예제
다음은 위에서 설명한 성능 최적화 기법을 사용한 예제입니다.
프로파일링 예제
import cProfile
def slow_function():
total = 0
for i in range(1, 10000):
for j in range(1, 100):
total += i * j
return total
cProfile.run('slow_function()')
메모리 관리 예제
from memory_profiler import profile
@profile
def slow_function():
total = 0
for i in range(1, 10000):
for j in range(1, 100):
total += i * j
return total
slow_function()
Cython 예제
example.pyx
def slow_function():
total = 0
for i in range(1, 10000):
for j in range(1, 100):
total += i * j
return total
setup.py
from setuptools import setup
from Cython.Build import cythonize
setup(
ext_modules=cythonize("example.pyx"),
)
컴파일 및 실행
python setup.py build_ext --inplace
python -c "import example; print(example.slow_function())"
반응형
'Python 문법 > Python 기본 문법(3.10 기준)' 카테고리의 다른 글
[python3.10 기본] 부록 (0) | 2024.07.02 |
---|---|
[python3.10 기본] 26. 다양한 도구와 기법 (0) | 2024.07.02 |
[python3.10 기본] 24. 보안 (0) | 2024.07.02 |
[python3.10 기본] 23. 데이터 과학과 머신러닝 (0) | 2024.07.02 |
[python3.10 기본] 22. 웹 개발 (1) | 2024.07.02 |