๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ

Langauge/Python

[Python] ์—ฐ์‚ฐ ์†๋„ ์˜ฌ๋ฆฌ๊ธฐ - ํ”„๋กœํŒŒ์ผ๋ง(Profiling)

728x90
๋ฐ˜์‘ํ˜•
๐Ÿ ๋ณธ ๊ฒŒ์‹œ๊ธ€์€ Python 3.11.0 ํ™˜๊ฒฝ์—์„œ ์ž‘์„ฑ๋˜์—ˆ์Šต๋‹ˆ๋‹ค!

 

ํ”„๋กœํŒŒ์ผ๋ง์€ ํ•จ์ˆ˜์˜ ํ˜ธ์ถœ, ๋ฐ˜ํ™˜, ์˜ˆ์™ธ๋ฅผ ์ถ”์ ํ•˜๊ณ  ๊ฐ ํ•จ์ˆ˜ ํ˜ธ์ถœ๊ณผ ์ด๋ฒคํŠธ๋ฅผ ์ถ”์ ํ•œ๋‹ค.

 

์ด๋ฅผ ํ†ตํ•ด ์ƒ๋Œ€์ ์œผ๋กœ ๋ฆฌ์†Œ์Šค๋ฅผ ๋งŽ์ด ์†Œ๋น„ํ•˜๋Š” ๋ถ€๋ถ„(๋ณ‘๋ชฉ)์„ ์ฐพ์•„์„œ ์„ฑ๋Šฅ ๊ฐœ์„ ์— ์ง‘์ค‘ ํ•  ์ˆ˜ ์žˆ๋‹ค.

import cProfile
import numpy as np
def find_max_python(numbers):
    max_value = numbers[0]
    for num in numbers:
        if num > max_value:
            max_value = num
    return max_value

# ์ˆซ์ž๊ฐ€ ํฌํ•จ๋œ ๋ฆฌ์ŠคํŠธ
numbers = [np.random.randint(0,1000) for _ in range(1000000)]

# ๊ธฐ๋ณธ ๊ตฌํ˜„ ํ”„๋กœํŒŒ์ผ๋ง
print("๊ธฐ๋ณธ ๊ตฌํ˜„ ํ”„๋กœํŒŒ์ผ๋ง:")
cProfile.run('find_max_python(numbers)')

def find_max_optimized(numbers):
    return max(numbers)

# ๊ฐœ์„ ๋œ ๊ตฌํ˜„ ํ”„๋กœํŒŒ์ผ๋ง
print("๊ฐœ์„ ๋œ ๊ตฌํ˜„ ํ”„๋กœํŒŒ์ผ๋ง:")
cProfile.run('find_max_optimized(numbers)')

 

๊ฐœ์„ ์ „ ํ”„๋กœํŒŒ์ผ๋ง์„ ์‚ดํŽด๋ณด๋ฉด ๊ธฐ๋ณธ ๊ตฌํ˜„์ผ ๋•Œ, 4๋ฒˆ์˜ ํ•จ์ˆ˜ ํ˜ธ์ถœ์ด ์žˆ์—ˆ๊ณ  find_max_python ํ•จ์ˆ˜ ์‹คํ–‰์— 0.033์ดˆ๊ฐ€ ์†Œ์š” ๋˜์—ˆ๋‹ค. ๊ทธ๋ž˜์„œ ์ด๋ถ€๋ถ„์„ ๊ฐœ์„ ํ•˜์˜€๋‹ค.

 

์ด๋ ‡๊ฒŒ ํ”„๋กœํŒŒ์ผ๋ง์„ ํ†ตํ•ด ํ•จ์ˆ˜์˜ ๋ณ‘๋ชฉ์„ ์ผ์œผํ‚ค๋Š” ๋ถ€๋ถ„์„ ์ฐพ์•„ ์ˆ˜์ •ํ•ด์„œ ๊ฐœ์„ ํ•  ์ˆ˜ ์žˆ๋‹ค.

728x90
๋ฐ˜์‘ํ˜•