[๋ฒ์ญ] 6 Python Performance Tips
1. ํต์ฌ์ ์ธ ๋ถ๋ถ์ ์ธ๋ถ ํจํค์ง์ ์์กดํด๋ผ.
ํ์ด์ฌ์ ์ฝ์ง๋ง, ์๊ฐ๊ณผ ๋ฐ์ ํ ๊ด๋ จ์ด ์๋ ์์ ๋ค์์ ์ข์ ์ฑ๋ฅ์ ์ ๊ณตํ์ง ์๋๋ค. ๊ทธ๋์ C, C++ ๊ธฐ๊ณ์ด, ์ธ๋ถ ํจํค์ง๋ค์ ์ฌ์ฉํ๋ฉด ์ฑ๋ฅ ํฅ์์ ๊ฐ์ ธ์ฌ์ ์๋ค. ์ด๋ฐ ํจํค์ง๋ค์ ํ๋ซํผ ์งํฅ์ (platform-specific)์ธ๋ฐ, ์ฆ ํ๋ซํผ ์งํฅ์ ์ธ ํจํค์ง๊ฐ ํ์ํ๋ค๋ ๊ฒ์ด๋ค. ํ๋ซํผ์ ์ข ์์ ์ผ๋ก ๋์ด ๋ฒ๋ฆฌ๋๋ฐ, ์ด๋ ์ฑ๋ฅ๊ณผ ์ด์์ฑ์ ๊ตํํ๋ค๊ณ ์๊ฐํ๋ฉด ๋๋ค. CPYTHON, PyInIne PyPy, Pyrex ๊ฐ์ ๊ฒ ๋ค์ด ์๋ค.
2. ์ ๋ ฌ์ ํค๋ฅผ ์ฌ์ฉํด๋ผ.
์ค๋๋ ํ์ด์ฌ ์ ๋ ฌ์ฝ๋๋ ์ปค์คํ ์ ๋ ฌ์ ์์ฑํ๋๋ฐ, ์๊ฐ์ด ๋ค๊ณ ์ค์ ๋ก ์ ๋ ฌ์ํํ๋ ์๋๋ฅผ ํ์๋ก ํ๋ค. ์ข์ ๋ฐฉ๋ฒ์ ๊ฐ๋ฅํํ ๊ธฐ์กด sort() ๋ฉ์๋์ key ๋ค์ ์ฌ์ฉํ๋ ๊ฒ์ด๋ค.
๊ฐ๊ฐ์ ๊ฒฝ์ฐ๋ฅผ ๋ณด๋ฉด, key ์ธ์๋ก ์ง์ ํ index ์ ์ํด์ ์ ๋ ฌ์ด ๋์ด ์ง๋ค. ์ด ๋ฐฉ๋ฒ์ ์ซ์ํ ๋ฟ๋ง ์๋๋ผ ๋ฌธ์ํ์์ ์ธ์ ์๋ค.
3. ๋ฃจํ ์ต์ ํ
๋ชจ๋ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด๋ ๋ฃจํ ์ต์ ํ๋ฅผ ๊ฐ์กฐํ๋ค. ํ์ด์ฌ์์ ๋ฃจํ๋ฅผ ์ข๋ ๋น ๋ฅด๊ฒ ๋ง๋๋ ๊ธฐ์ ์ ์์งํด์ผ ํ๋ค.(์ฐพ์ผ๋ผ๋ ์ ๊ธฐ) ๊ทธ๋ฌ๋ ๊ฐ๋ฐ์๋ค์ด ํ๋์ ๋ฉ์๋์์์ ๋์น๋ ๊ฒ์ ๋ฃจํ์์์ ์ (dots)์ ์ฌ์ฉ์ ํผํ๋ ๊ฒ์ด๋ค. (๋ฃจํ ์์์ .์ ํตํ ํธ์ถ์ ์ ๊ธฐ)
์์ ๋ฅผ ๋ณด๋ฉด, ๋งค๋ฒ str.upper ๋ฅผ ํธ์ถํ๋๋ฐ, ํ์ด์ฌ์ ์ด๊ฒ์ ๋ฉ์๋๋ก ํ๊ฐํ๋ค. ๊ทธ๋ฐ๋ฐ ๊ทธ ๋ถ๋ถ์ ๋ณ์๋ก ํ๊ฐํ๊ฒ ๋ง๋ค๋ฉด, ์ด๋ฏธ ์ธํฐํ๋ฆฌํฐ๊ฐ ์๊ณ ์๊ธฐ ๋๋ฌธ์, ํจ์ฌ ๋ ์์ ์ด ๋นจ๋ผ์ง๋ค. ์ค์ํ ๊ฒ์ ๋ฃจํ ์์์ ์ผ์ ์์ ์ค์ด๋ ๊ฒ์ด๋ค.
๋ฃจํ ์ต์ ํ์ ์ฌ๋ฌ๊ฐ์ง ๋ฐฉ๋ฒ์ด ์๋๋ฐ ์ด๊ฒ๋ ํ๋์ ๋ฐฉ๋ฒ์ด๊ณ ๋ฆฌ์คํธ ์ถ์ฝ ์๋ ์ด์ ์ ๊ฐ์ ธ๋ค ์ค๋ค. ์ค์ํ ์ ์ ๋ฃจํ ์ต์ ํ๊ฐ ์ดํ๋ฆฌ์ผ์ด์ ์ ์๋ ํฅ์์ ์ํ ๋ฐฉ๋ฒ๋ค ์ค ํ๋๋ผ๋ ๊ฒ์ด๋ค.
4. ์๋ก์ด ๋ฒ์
๋ชจ๋ ๋ฒ์ ์ ํ์ด์ฌ์ด ๊ทธ ์ด์ ๋ณด๋ค ๋น ๋ฅด๋ค.(์ต์ ํ ํฌํจ) ์ ํ ๋๋๋ถ๋ถ์ ์ ํธํ๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๊ฐ ์๋ก์ด ํ์ด์ฌ ๋ฒ์ ์ผ๋ก ์ฎ๊ฒจ์ก๋์ง, ์ด์์ด ๋์๋๊ฐ ํ๋ ๋ถ๋ถ์ด๋ค. ์ค์ํ์ง๋ฌธ์ ์ธ์ ์๋ก์ด ๋ฒ์ ์ด ์ถฉ๋ถํ๊ฒ ์ง์ํ ์ง์ ๋ํ๊ฒ.
์๋ก์ด ๋ฒ์ ์ ํ์ด์ฌ์์ ์ฌ์ ํ ์ฝ๋๊ฐ ์ ๋์ํ๋์ง ๊ฒ์ฆํด์ผํ๊ณ , ์๋ก์ด ๋ฒ์ ์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ฌ์ฉํด์ผ ํ๋ค. ๊ทธ๋ฆฌ๊ณ ์ดํ๋ฆฌ์ผ์ด์ ์์ ๋ฌธ์ ์๋์ง ์ฒดํฌํด์ผํ๋ค. ์ผ๋จ ์ฎ๊ฒจ๊ฐ๊ณ ๋๋ฉด ํ๋กํ์ผ๋ง์ ์๋ก์ด ๋ฒ์ ์ ํ์ด์ฌ์์ ํ๊ณ ๋ฌธ์ ๊ฐ ๋๋ ๋ถ๋ถ์ด ์์ผ๋ฉด ํด๋น ๋ถ๋ถ์ ์๋ก์ด ๊ฒ์ผ๋ก ์ ๋ฐ์ดํธ ํด๋ผ.
5. ๋ฉํฐ ์ฝ๋ฉ ์ ๊ทผ์ ์๋ํด๋ผ
์ดํ๋ฆฌ์ผ์ด์ ์ ๋ง๋ค๋ ๋งค๋ฒ ๊ฐ์ ์ฝ๋ฉ ์ ๊ทผ๋ฐฉ์์ ์ฌ์ฉํ๋ ๊ฒ์ ์ดํ๋ฆฌ์ผ์ด์ ์ ๋๋ฆฌ๊ฒ ํ ์๋ ์๋ค.(๋ ๊ฐ์๋ฐฉ์์ ์ฌ์ฉํ๋ ๊ฒ ๋ณด๋ค๋ ์คํ์ ํด๋ณด๋ผ๋ ์ด์ผ๊ธฐ) ํ๋กํ์ผ๋ง ํ๋ก์ธ์ค์ ์ผ๋ถ๋ก์ ์์ ์คํ์ ์๋ํด๋ผ. ์๋ฅผ๋ค์ด, ์ฌ์ ํ์(dict)๋ด์ ์์ดํ ์ ๊ด๋ฆฌํ ๋, ์์ดํ ์ด ์ด๋ฏธ ์กด์ฌํ๊ณ ๊ฐฑ์ ํ ์ง ๋๋ ๋ฐ๋ก ์์ดํ ์ ์ฝ์ ํ๊ณ ๊ทธ๋ฆฌ๊ณ ๋์ ์์ดํ ์ด ์กด์ฌ ํ์ง ์๋ ์์ธ๋ฅผ ์ฒ๋ฆฌํ ์ง์ ๋ํ ๊ฒฐ์ ์ ๋ํ ์ ๊ทผ๋ฒ์ ์๊ฐํด ๋ณด๋ฉด,
์ฒซ๋ฒ์งธ ์ฝ๋๋ฅผ ๋ณด๋ฉด,
์์ ์ฝ๋๋myDict์ด ๋น์ด ์์๋๋ ๋น ๋ฅด๋ค. ๊ทธ๋ฌ๋ myDict ์ด ๋ณดํต ๋ฐ์ดํฐ๊ฐ ์๋ ๊ฒฝ์ฐ์, ๋ ๋์ ์ ๊ทผ์ด ์๋ค.
output ์ {โdโ: 4, โcโ: 4, โbโ: 4, โaโ: 4} ์ผ๋ก ๋ ๊ฒฝ์ฐ ๋ชจ๋ ๊ฐ๋ค. ์ค์ง ์ฐจ์ด๋ ์ด๋ป๊ฒ ๊ฒฐ๊ณผ๋ ์ป๋๋์ ์ฐจ์ด์ด๋ค. ๋ค๋ฅธ ์ฝ๋ฉ ๊ธฐ์ ์ ๋ง๋๋ ๊ฒ์ ์ดํ๋ฆฌ์ผ์ด์ ์์์ ๊ฒฐ๊ณผ๋ฅผ ๋ ๋นจ๋ฆฌ ์ป๋๋ฐ ๋์์ ์ค๋ค.
6. ์ดํ๋ฆฌ์ผ์ด์ ์ ํฌ๋ก์ค ์ปดํ์ผ
๊ฐ๋ฐ์๋ ๋๋๋ก ์ปดํจํฐ๊ฐ ํ๋์ ์ดํ๋ฆฌ์ผ์ด์ ์ ๋ง๋๋๋ฐ ์ฌ์ฉ๋๋ ์ด๋ค ์ธ์ด๋ก ๋งํ์ง ์๋๋ค๋ ๊ฒ์ ์์ด๋จน๋๋ค. ์ปดํจํฐ๋ ๊ธฐ๊ณ์ด๋ก ์ด์ผ๊ธฐํ๋ค. ์ดํ๋ฆฌ์ผ์ด์ ์ ๊ตฌ๋ํ๊ธฐ ์ํด์๋ ์ฌ๋์ด ์ฝ์์ ์๋ ํํ์ ์ฝ๋๋ฅผ ๊ธฐ๊ณ๊ฐ ์ดํดํ ์ ์๋ ํํ๋ก ๋ณํํด์ผ ํ๋ค. ํ์ด์ฌ๊ณผ ๊ฐ์ ์ธ์ด๋ก ์ดํ๋ฆฌ์ผ์ด์ ์ ๋ง๋ค์๋๋ฐ, ์ฑ๋ฅ์ ์ธ ์ธก๋ฉด์ผ๋ก C++๊ณผ ๊ฐ์ด ๋ค๋ฅธ ์ธ์ด๋ก ์ด์๋๋ค. ํธ์คํธ ์์คํ ์์ ์ดํ๋ฆฌ์ผ์ด์ ์์ ํ๊ณ ์ ํ๋ ๊ฒ๊ณผ ๋ฆฌ์์ค๋ฅผ ์ฃผ๊ธฐ ๋๋ฌธ์ ํธ์คํธ ์์คํ ์ ์์กด์ ์ด๋ค. ํ๊ฐ์ง ํฅ๋ฏธ๋ก์ด ํฌ๋ก์ค ์ปดํ์ผ๋ฌ์ธ Nuitka ๋ ํ์ด์ฌ ์ฝ๋๋ฅผ C++ ์ฝ๋๋ก ๋ณํํ๋ค. ๋ณํ ๊ฒฐ๊ณผ๋ฅผ ํตํด์ ์ธํฐํ๋ฆฌํฐ๊ฐ ์๋ ๋ค์ดํฐ๋ธ ํ๊ฒฝ์์ ์ดํ๋ฆฌ์ผ์ด์ ์ ์คํํ ์ ์๋ค. ํ๋ซํผ๊ณผ ํ ์คํฌ์ ์์กดํจ์ผ๋ก์จ, ๋๋ผ์ด ์ฑ๋ฅํฅ์์ ๋ณผ ์ ์๋ค. ํฌ๋ก์ค ์ปดํ์ผ๋ฌ์ ํจ๊ป ๋์ํ ๋ ํ์ธํด์ผ ํ ๊ฒ์ ์ปดํ์ผ๋ฌ๊ฐ ๋น์ ์ด ์ฌ์ฉํ๋ ํ์ด์ฌ ๋ฒ์ ์ ์ง์ํ๋์ง ํ์ธํด๋ผ. Nuitka๋ ํ์ด์ฌ 2.6, 2.7, 3.2, 3.3์ ์ง์ํ๋ค. ์ ๋๋ก ๋์ํ๊ธฐ ์ํด์๋ ํ์ด์ฌ ์ธํฐํ๋ฆฌํฐ์ C++ ์ปดํ์ผ๋ฌ ๋๋ค ํ์ํ๋ค. Nuitka ๋ ์๋ง์ C++ ์ปดํ์ผ๋ฌ๋ฅผ ์ง์ํ๋๋ฐ Microsoft Visual Studio, MinGW, Clang/LLVM ๋ฑ์ ์ง์ํ๋ค. ํฌ๋ก์ค ์ปดํ์ผ์ ๋ช๊ฐ์ง ๋จ์ ์ด ์์์ ์๋ค. ์๋ฅผ๋ค์ด, Nuitka์ ํจ๊ป ๋์ํ ๋, ์์ ํ๋ก๊ทธ๋จ์ด ํฐ ๋๋ผ์ด๋ธ ๊ณต๊ฐ์ ์๋ชจ ํ๋๊ฒ์ ๋ณผ์ ์๋๋ฐ ์ด๊ฒ์ Nuitka ๊ฐ ํ์ด์ฌ์ ๊ธฐ๋ฅ์ ์ ๋ง์ DDL๋ค์ ์ด์ฉํด์ ๊ตฌํํ๊ธฐ ๋๋ฌธ์ด๋ค. ๊ทธ๋์ ๋ง์ฝ ๋ฆฌ์์ค๊ฐ ์ ์ฝ๋๋ ์์คํ ์์ ์ฒ๋ฆฌ๋๋ค๋ฉด ์ด ํด๊ฒฐ๋ฐฉ๋ฒ์ ์ ๋์ํ์ง ์์๊ฒ ์ด๋ค.
ํต์ฌ(Bottom line)
์ด ๊ธ์์์ 3๊ฐ์ง ๊ฐ๊ฐ์ ํ๋ค์ ์ข๋ ๋น ๋ฅธ ํ์ด์ฌ ์ดํ๋ฆฌ์ผ์ด์ ์ ๋ง๋๋๋ฐ ๋์์ ์ค๋ค. ๊ทธ๋ฌ๋ ์ ์ด์์ ์๋ค.(But there are no silver bullets.) ํ๋ค์ค ์ด๋๊ฒ๋ ๋งค๋ฒ ์๋ํ์ง๋ ์์๊ฒ์ด๋ค. ์ด๋ค ๊ฒ์ ํ์ด์ฌ์ ํน์ ์์ ๋ ๋์๊ฒ์ด๋ค-์ฌ์ง์ด ํ๋ซํผ๋ง๋ค ๋ค๋ฅผ์๋ ์๋ค. ์ด๋ ๋ถ๋ถ์ด ๋๋ฆฐ์ง๋ฅผ ๊ฒฐ์ ํ๊ธฐ ์ํด ์ดํ๋ฆฌ์ผ์ด์ ํ๋กํ์ผ์ ํด๋ณด๋๊ฒ์ด ํ์ํ๋ฉฐ ๊ทธ๋ฆฌ๊ณ ํ์ ์๋ํด ๋ณด๋ฉด, ํด๋น ์ด์์ ๋ํ ์ต๊ณ ์ ํด๊ฒฐ์ฑ ์ด ๋์ค๊ฒ ๋๋ค.