새삼 한글 번역이 되어있는 Python 공식 문서를 보면서 감사함을 느낍니다.
Python 문서에서는 CPython의 경우, 전역 인터프리터 락(Global Interpreter Lock)을 걸기 때문에 한 시점에서 하나의 쓰레드만이 파이썬 코드를 실행할 수 있다고 설명합니다. 물론 입출력 작업(I/O)이 이루어질 때는 락을 반납하기 때문에, 입출력 작업이 많은 경우에는 쓰레드 기반의 병렬처리가 유효하다고 합니다.
공식 문서에선 다음과 같이 설명합니다.
한 번에 오직 하나의 스레드가 파이썬 바이트 코드 를 실행하도록 보장하기 위해 CPython 인터프리터가 사용하는 메커니즘.
병렬 처리는 항상 공유자원에 대한 경쟁 상황을 유발하며, 이에 따르는 부작용 또한 발생합니다. Python이 간결한 코드 작성을 추구한다는 관점에서, Python 개발자가 공유자원을 고려한 프로그래밍을 피할 수 있도록 언어를 설계한 듯합니다.