Python 3.13
2024년 10월 7일 파이썬 3.13 버전이 공개되었다. 이번 버전에서는 새로운 JIT 컴파일러, 모바일 호환성 강화 등 다양한 업데이트가 있었지만 그중에 주목할 부분은 ‘Free-threaded CPython’ 이라고 생각한다.
What’s New In Python 3.13
Editors, Adam Turner and Thomas Wouters,. This article explains the new features in Python 3.13, compared to 3.12. Python 3.13 was released on October 7, 2024. For full details, see the changelog. ...
docs.python.org
no-GIL
파이썬은 악랄한(?) 제한으로 불리는 GIL(Global Interpreter Lock)에 의해서 멀티 스레드가 힘든 언어로 오랫동안 자리 잡고 있다.
GIL 이란?
하나의 스레드로만 파이썬 인터프리터를 제어할 수 있도록 하는 전역적인 뮤텍스(Mutex)
[Python] 악랄한 금제 GIL(Global Interpreter Lock)
[Python] 악랄한 금제 GIL(Global Interpreter Lock)
인터프리터 언어(Interpreter Language)파이썬은 기본적으로 인터프리터 언어이다. 고급 프로그래밍 언어의 대부분인 70% 이상이 인터프리터 언어라고 할 수 있다. 대표적인 웹 인터프리터 언어인 JavaS
restart-web-base.tistory.com
이전부터 꾸준히 no-GIL을 요구한 개발자 및 커뮤니티의 의견에 수긍하여, 2023년 1월 부터 PEP 703 프로젝트가 시작되었다. 그리고 그 결과 3.13 버전에서 처음으로
⭐CPython에서 선택적으로 no-GIL버전의 빌드를 사용할 수 있게 되었다!⭐
이후 몇 단계의 발전 과정을 거쳐서 최종적으로는 no-GIL 버전의 빌드가 기본값이 된다.
PEP 703 – Making the Global Interpreter Lock Optional in CPython | peps.python.org
PEP 703 – Making the Global Interpreter Lock Optional in CPython | peps.python.org
CPython’s global interpreter lock (“GIL”) prevents multiple threads from executing Python code at the same time. The GIL is an obstacle to using multi-core CPUs from Python efficiently. This PEP proposes adding a build configuration (--disable-gil) t
peps.python.org
사용조건
no-GIL 모듈은 이번에 새롭게 추가된 실험적인 기능이기 때문에, 사용하기 위해서 몇개의 설정이 필요하다.
- python3.13t 또는 python3.13t.exe 파일이 필요하다.
❌기본적인 python3.13에서는 불가능하다!❌
# no-GIL 버전 파이썬 설치
pyenv install 3.13t-dev
# 현재 쉘 파이썬 버전 변경
pyenv shell 3.13t-dev
# Python 3.13.0+ 형식으로 나오면 성공
python3 --version
- GIL 해제 설정
# GIL 해제
PYTHON_GIL = 0
# GIL 활성화
PYTHON_GIL = 1
1. Command line and environment
1. Command line and environment
The CPython interpreter scans the command line and the environment for various settings. CPython implementation detail: Other implementations’ command line schemes may differ. See Alternate Impleme...
docs.python.org
다만 CPython 상위 제어 언어인 -X 의 -X gil 명령어를 더 우선시하기 때문에 PYTHON_GIL=1 로 해제한 GIL이 강제로 활성화 될 수도 있다.
1. Command line and environment
1. Command line and environment
The CPython interpreter scans the command line and the environment for various settings. CPython implementation detail: Other implementations’ command line schemes may differ. See Alternate Impleme...
docs.python.org
다음에 GIL의 활성화 여부를 출력하는 ‘test_gil.py’가 있다.
import sys
PYTHON_GIL = 0
if sys.flags.gil:
print("The Global Interpreter Lock (GIL) is ENABLED.")
else:
print("The Global Interpreter Lock (GIL) is DISABLED.")
이제 이 'test_gil.py'를 실행해보면,
# 실행
python test_gil.py
# 출력
The Global Interpreter Lock (GIL) is DISABLED.
GIL이 해제되어 있는 것을 볼 수 있다!
-X gil=1 을 통해서 명시적으로 GIL을 활성화해서 실행하면,
# 실행
python -X gil=1 test_gil.py
# 출력
The Global Interpreter Lock (GIL) is ENABLED.
이렇게 -X gil=1이 우선시 되어서 실행되고, GIL이 활성화되어 있는 것을 알 수 있다.
반대로 -X gil=0 으로 명시적으로 GIL을 해제할 수도 있다.
향후 버전의 방향
이제 no-GIL 빌드가 공식적으로 지원되기 때문에 추후 몇 번의 새로운 버전에서 다양한 CPython API와 no-GIL 빌드가 업데이트 될 것으로 보인다.
바로 다음버전인 3.14 버전 패치 예고에도 PEP 741 기반으로 C API의 업데이트가 예정되어 있다. no-GIL 모듈과 직접적으로 연관이 있다 라고 말하기는 어렵지만, 지속적으로 CPython의 수정과 완성을 위해서 업데이트가 계속될 것이다.
What’s new in Python 3.14
Editor, TBD,. This article explains the new features in Python 3.14, compared to 3.13. For full details, see the changelog. Summary – release highlights: PEP 649: deferred evaluation of annotations...
docs.python.org
C파이썬 핵심 개발자인 토마스 우터(Thomas Wouters)에 의하면 5+년 이후에는(2023년 7월 기준) Cpython의 빌드를 no-GIL 버전 1개로만 유지 할 것이라고 한다. 빌드 방식이 2개일 때 당연하게도? 테스트 리소스, 디버깅 시나리오가 2배로 증가하기 때문에 (😱😱😱😱) 오랜기간동안 2개의 빌드를 제공하는 것은 어려울 것이라고 얘기했다.
프로젝트 시작 후, 약 2년 좀 안되는 시간이 지나서 시험용 모듈을 배포 했기 때문에, 2 ~ 3개의 버전을 거쳐서 no-GIL 버전을 테스트 할 것이다. 그 후에 CPython에서 no-GIL 빌드만 남기고 GIL 빌드 버전을 삭제할 것으로 보인다. 이 과정에 맞추어서 지속적으로 CPython의 API가 no-GIL 빌드에 맞춰서 업데이트 될 거라 생각된다.
A Steering Council notice about PEP 703 (Making the Global Interpreter Lock Optional in CPython)
A Steering Council notice about PEP 703 (Making the Global Interpreter Lock Optional in CPython)
Posting for the whole Steering Council, on the subject of @colesbury’s PEP 703 (Making the Global Interpreter Lock Optional in CPython). Thank you, everyone, for responding to the poll on the no-GIL proposal. It’s clear that the overall sentiment is po
discuss.python.org
Free-Threaded CPython의 미래
이렇게 no-GIL 버전의 CPython 버전을 공식적으로 ‘프리 스레드(free-threaded) CPython` 이라고 불린다. 이를 통해서 GIL 없이 병렬 스레드를 제대로 사용할 수 있기 때문에, CPU 집약적인 작업들을 다중 스레드에서 효과적으로 처리할 수 있다. 이를 통해서 파이썬은 그동안 약점으로 지적되어 왔던 멀티코어를 활용한 멀티스레드 병렬 처리 능력을 향상시킬 수 있다.
어떤 사람들은 멀티 스레드가 기본적으로 적용되는 Python4의 시작이라고도 말한다. 하지만, Python2 에서 Python3로 넘어오면서 힘든 상황을 겪었던 파이썬이기 때문에, 다수의 커뮤니티에서는 철저한 하위 호환성을 갖춘 다음에 파이썬이 중대한 변화를 줄 것으로 예상하고 있다.
토마스 우터가 ‘no-GIL의 시험적인 도입은 파이썬 4를 위한 시작이 아니다’라고 단호하게 선을 그어서 얘기한 만큼, 이번 변화는 Python 4를 위한 초석이 아닌, 21세기의 프로그래머들이 요구하는 병렬 처리를 지원하기 위한, 2024년 최고의 프로그래밍 언어로 선정된 파이썬의 새로운 도전의 첫발이라고 생각한다.
'Python' 카테고리의 다른 글
[Python] __name__ 부터 if __name__ == “__main__” : 까지 완벽 정리 (2) | 2025.02.05 |
---|---|
[Python] 피클(pickle) 파일 (5) | 2025.02.03 |
[Python] 악랄한 금제 GIL(Global Interpreter Lock) (9) | 2024.12.20 |