Python 3.14 공식 릴리즈, GIL 해제 지원

Python 3.14 버전이 25-10-07에 공식적으로 릴리즈가 되었습니다. 3번대 메이저 버전을 넘어서, 파이썬 역사를 통틀어 가장 역사적인 변화가 이루어졌습니다. 날아오르나 파이썬?!

Python 3.14 version release

파이썬의 대격변

🐍
Python 3.14 버전이 25-10-07에 공식적으로 릴리즈가 되었습니다.
3번대 메이저 버전을 넘어서, 파이썬 역사를 통틀어 가장 역사적인 변화가 이루어졌습니다. 날아오르나 파이썬?!

자세한 릴리즈 노트는 공식 Docs를 참조하시면 되겠습니다.

What’s new in Python 3.14
Editors, Adam Turner and Hugo van Kemenade,. This article explains the new features in Python 3.14, compared to 3.13. Python 3.14 was released on 7 October 2025. For full details, see the changelog…

요약

  • PEP 779: Free-threaded Python(즉, 전역 인터프리터 락(GIL)이 제거되었거나 선택적이 된 형태) 공식 지원 시작 
  • PEP 649: 어노테이션(annotation)의 실행 시점이 지연됨(deferred evaluation) → 타입 힌트 사용/런타임 처리 방식 개선됨 
  • PEP 750: Template string literals(“t-strings”) 기능 도입 → 기존 f-string과 유사하지만 사용 목적/인터페이스가 다름 
  • PEP 734: 표준 라이브러리에서 여러 인터프리터(multiple interpreters) 지원 강화됨 
  • 표준 라이브러리 변화: 예컨대 compression.zstd 모듈 추가됨(PEP 784) 등 최신 압축 알고리즘 Zstandard 지원 
  • 언어 문법/개선: 예외 처리 문법 개선(except/except*에서 괄호 생략 가능, finally 블록 탈출 개선) 등 
  • 빌드/배포 체계 변화: 예컨대 PGP 서명 대신 Sigstore 사용 권고됨(PEP 761) 등 

눈 여겨볼 변화?

당연하게도, Free-Threaded Python 입니다.

이미 Python 3.13 릴리즈에서 실험적인 형태로 GIL 해제를 지원했으나, 드디어 공식적인 지원이 이루어지게 되었습니다.

배포 관점에서 이제 표준(GIL) 빌드와 프리스레드(무 GIL) 빌드 두 가지가 공존합니다.

프리스레드 빌드는 컴파일 시 --disable-gil 플래그로 만들 수 있고, 이때 ABI 태그가 달라지고(t), 내부적으로 Py_GIL_DISABLED가 정의됩니다.

런타임에 PYTHONGIL=0/1로 해제/강제 활성화를 제어하는 메커니즘도 포함됩니다(프리스레드 빌드 한정).

아직은 선택적, 아마 앞으로도 몇 년 간은.

3.14 버전을 사용한다고 해서, 자동으로 GIL을 해제하고 프리 스레드 버전으로 동작하는 것은 아닙니다.

이에 대해서 공식 릴리즈 노트에서는 다음과 같이 얘기합니다.

The free-threaded build of Python is now supported and no longer experimental. This is the start of phase II where free-threaded Python is officially supported but still optional.

The free-threading team are confident that the project is on the right path, and appreciate the continued dedication from everyone working to make free-threading ready for broader adoption across the Python community.

With these recommendations and the acceptance of this PEP, the Python developer community should broadly advertise that free-threading is a supported Python build option now and into the future, and that it will not be removed without a proper deprecation schedule.

Any decision to transition to phase III, with free-threading as the default or sole build of Python is still undecided, and dependent on many factors both within CPython itself and the community. This decision is for the future.

요약하자면 다음과 같습니다.

이 제안서(PEP)가 승인되고 그에 따른 권고사항이 수용됨에 따라,
파이썬 개발자 커뮤니티는 프리스레드(Free-threading) 이
이제 공식적으로 지원되는 파이썬 빌드 옵션임을 널리 알리고,
향후에도 이 기능이 정식 지원되는 옵션으로 유지될 것임을 명시해야 한다.
또한, 만약 이 기능을 제거해야 하는 상황이 온다면,
반드시 적절한 폐기(Deprecation) 절차를 거쳐 단계적으로 이루어져야 한다.

최소한 향후 몇 년 간은 이렇게 GIL 버전/ GIL 제거 버전을 선택하여 빌드할 수 있도록 지원할 예정이며, GIL의 완전한 제거는 아직 일정에 없으며, 파이썬 사용자 커뮤니티의 의견을 지속적으로 반영하겠다는 것이죠.

그럼 어떻게 써야 할까?

빌드 시점에서 --disable-gil 옵션을 선언하면 끝입니다.

다만, 파이썬을 빌드해서 쓴다는 것 자체가 생소할 수 있습니다. 여기서 말하는 빌드는, 실행할 소스코드를 빌드한다는 것이 아니라, 파이썬 런타임을 빌드함을 의미합니다.

이미 빌드된 인터프리터 환경에서 런타임마다 GIL을 껐다 켰다 하는 건, GIL이 해제된 빌드 버전에서만 가능합니다.

GIL 해제 빌드는 다음과 같은 생성할 수 있습니다.

# CPython 소스 다운로드
git clone https://github.com/python/cpython.git
cd cpython
git checkout v3.14.0

# configure 실행
./configure --disable-gil --prefix=$HOME/python314t
make -j$(nproc)
make install

# 코드 실행 시, 아래와 같은 빌드된 런타임 실행 파일을 활용하거나, 해당 경로를 Alias로 등록
$HOME/python314t/bin/python3.14 main.py

빌드는 만들었는데, 그럼 문법에 변화가 있나?

CPython에서 GIL 기반으로 작성된 C API 코드를 뜯어고치는 수준이 아니라, 순수 Python만 쓰는 사람이라면 전혀 바뀌는 게 없습니다.

Python은 이미 오래전부터 threading 모듈과 관련 문법을 모두 지원하고 있었습니다. (import threading으로 불러오는 바로 그 모듈이죠.)

​다만 GIL이 진짜 멀티 스레딩을 제한하고 있었을 뿐이죠.

이제 Python 3.14부터는, GIL이 선택적으로 제거된 Free-threaded 빌드를 통해 스레드들이 진짜로 동시에 여러 코어에서 바이트코드를 실행할 수 있게 되었습니다.

이제 개발자가 신경 써야 할 건 단 하나, Race Condition(경쟁 상태) 만 잘 관리하면 됩니다.

벤치마크 결과

GIL을 해제하고 다음과 같은 CPU 바운드 작업을 진행해봤습니다.

import threading
import sysconfig
import time
print(f"GIL is disabled : {sysconfig.get_config_var("Py_GIL_DISABLED")}")

# 단순한 CPU-bound 작업 (GIL 영향이 큰 부분)
def cpu_task(n: int):
    total = 0
    for i in range(n):
        total += (i ** 2) % 97
    return total

# 한 스레드 당 25,000,000 연산 수행, 총 4 스레드로 100,000,000번 연산 진행
def threaded_benchmark(num_threads=4, iterations=25_000_000):
    threads = []
    start = time.perf_counter()

    for _ in range(num_threads):
        t = threading.Thread(target=cpu_task, args=(iterations,))
        threads.append(t)
        t.start()

    for t in threads:
        t.join()

    elapsed = time.perf_counter() - start
    print(f"{num_threads} threads → {elapsed:.3f} sec")


if __name__ == "__main__":
    print("Python threading benchmark\n")

    # 단일 스레드 기준, 1000,000,000번 연산 진행
    start = time.perf_counter()
    cpu_task(100_000_000)
    print(f"Single-thread → {time.perf_counter() - start:.3f} sec")

    # 멀티스레드 실행
    threaded_benchmark(num_threads=4)

결과는 다음과 같습니다

(base) ➜  python $HOME/python314t/bin/python3.14t test.py
GIL is disabled : 1
Python threading benchmark

Single-thread → 7.033 sec
4 threads → 1.809 sec

GIL이 해제된 상태에서는, 연산 성능이 대략 390% 가량 상승하여, 스레드 배수인 4와 거의 근접한 수준이 되었습니다.

이제 Python도 실질직인 멀티 스레딩의 이득을 누릴 수 있게 된 것입니다!

이제 이것도 옛 말이 되었군요.

JIT은 아직 실험적 단계

개인적으로, GIL 해제보다 JIT(Just-In-Time) 컴파일러가 먼저 공식지원 단계에 이를 것이라 생각했는데, GIL 해제가 먼저 지원돼서 내심 기쁘긴 합니다.

이제 더 이상 하드웨어 리소스를 배로 먹는 멀티 프로세싱에 의존할 필요 없이 보다 빠른 서버를 돌릴 수 있다는 의미이므로, 파이썬 백엔드 생태계는 물론이고, AI 학습에도 훨씬 큰 박차가 가해질 것이라 생각합니다.

생각해보면, AI 생태계의 성장 속도를 고려할 때 GIL 해제가 JIT보다 먼저 발표된 것도 자연스러운 수순이었을지도 모릅니다. 파이썬이 더 이상 “연산에 약한 언어”로 머물지 않겠다는 의지를 보여준 변화라고 할 수 있습니다.

GIL이 얼마나 AI 생태계에 악영향을 끼쳤는지는, 2023년부터 논의된 Free-Threading에 대한 문서인 PEP-703를 참조하시면, Deepmind, Scikit-learn 등, 다양한 AI 생태계 종사자들의 증언을 보실 수 있습니다.