Python 3.11 이론, 실습

2023. 7. 31. 08:53개발/Python

728x90
반응형

Python 3.11

파이썬 3.11은 C파이썬(CPython)이 인터프리터 표준 버전이 된 패스터 C파이썬(Faster CPython) 프로젝트의 첫 번째 장점을 공개한 버전이다.
출처 : 코딩월드뉴스(https://www.codingworldnews.com)

파이썬 3.11 버전은 이전 버전에 비해 (3.10) 전반적인 실행 속도가 10%~60% 정도, 평균적으로는 25% 정도 빨라졌다고 한다

빨라진 이유 ?

  1. 함수 호출을 위한 스택 프레임을 효율적으로 설계해 더 적은 메모리를 사용.
  2. 파이썬 런타임에 필요한 핵심 모듈도 더 효율적으로 저장 및 로드.

변경된 점 ?

  1. 속도개선
    • 10% ~ 60% 속도 증가
    • 함수 호출 오버헤드 감소
    • 메모리 사용량 감소
  2. 향상된 오류 정보
    • 오류 보고 개선 (잘못된 곳 표시)
    x = [1,2,3]
    z = x[1][0]
    
    # 기존 python 에러
    File "C:\\Python311\\code.py", line 2, in <module> 
        z = x[1][0] 
    TypeError: 'int' object is not subscriptable
    
    # 3.11 python 에러
    File "C:\\Python311\\code.py", line 2, in <module> 
        z = x[1][0] 
            ~~~~^^^ 
    TypeError: 'int' object is not subscriptable
    
  3. 예외 개선
    • 새로운 except*구문과 ExceptionGroup예외 형식 사용.
    • “제로 코스트” 예외 : try/except블록의 기본 경로가 더 빠르며 사용량도 적어짐.
    • 예외 포착 시간 10% 감소
  4. 형식 지정 개선
  5. stdlib의 TOML 읽기 전용 지원
  6. regex를 위한 원자 그룹과 속도 향상
    • 정규 표현식 re 모듈이 3.11에서는 원자그룹을 지원하여 10% 속도 향상
  7. 표준 라이브러리의 ‘죽은 배터리’ 제거

Python 3.11 실습

환경

기술 버전

CentOS 6
linux  
Python 3.11
Python 3.6

설치

Python 3.6 CentOS 설치시 기본 설치

Pyhton 3.11 설치 방법

yum update
yum install openssl-devel bzip2-devel libffi-devel
yum install bison byacc cscope ctags cvs diffstat doxygen flex gcc gcc-c++ gcc-gfortran gettext git indent intltool libtool patch patchutils rcs redhat-rpm-config rpm-build subversion swig systemtap -y
yum groupinstall "Development Tools"
wget <https://www.python.org/ftp/python/3.11.0/Python-3.11.0.tgz>
tar -xzf Python-3.11.0.tgz
cd Python-3.11.0.tgz
./configure --enable-optimizations
make altinstall
python3.11 -V

make 실패시

# 반복
make clean
./configure --enable-optimizations
make altinstall

Python3.6 vs Python3.11

Python3.6

import time
import sys

def append_list(n_iter):
    temp_list = []
    for i in range(n_iter):
        temp_list.append(i)

if __name__ == '__main__':
    print(sys.argv[1])
    start = time.time()
    append_list(int(sys.argv[1]))
    print("Elapsed time: {0} ms".format((time.time() - start)*1000))

실행결과

python test.py  100000
Elapsed time: 38.995981216430664 ms

Python3.11

import time
import sys

# 데코레이터 사용
def timer(function):
    def tictoc(*args, **kwargs):
        start = time.time()
        function(*args, **kwargs)
        print(f'Elapsed time: {(time.time() - start) * 1000 } ms')
    return tictoc

@timer
def append_list(n_iter):
    temp_list = []
    for i in range(n_iter):
        temp_list.append(i)

if __name__ == '__main__':
    print(sys.argv[1])
    append_list(int(sys.argv[1]))

실행결과

python test.py 100000
Elapsed time: 16.49618148803711 ms

결과

  • 2배 이상의 성능을 보여준다.
728x90
반응형

'개발 > Python' 카테고리의 다른 글

FastAPI - 설치  (0) 2023.07.31
Python - Uvicorn  (0) 2023.07.31
Python - FastAPI  (0) 2023.07.31
Python Framework  (0) 2023.07.31
Python 기초 이론  (0) 2023.07.31