큐피톤

CPython
큐피톤
Python logo and wordmark.svg
원저작자귀도 반 로섬
개발자Python Software Foundation에서 지원하는 Python 핵심 개발자 및 Python 커뮤니티
초기 릴리즈1994년 1월 26일; 28년 전 (1994-01-26)
안정된 릴리스
3.10.5[1] / 2022년 6월 6일; 59일 전(2022년 6월 6일)
저장소https://github.com/python/cpython
기입처C, Python
플랫폼42개의 플랫폼, 『Distribution』를 참조해 주세요.
이용가능기간:영어
유형Python 프로그래밍 언어 인터프리터
면허증.Python 소프트웨어 Foundation 라이센스
웹 사이트www.python.org

CPython은 Python 프로그래밍 언어의 참조 구현입니다.C와 Python으로 작성된 CPython은 Python 언어의 기본 구현이며 가장 널리 사용됩니다.

CPython은 Python 코드를 해석하기 전에 바이트 코드로 컴파일하기 때문에 인터프리터 컴파일러로 정의할 수 있습니다.C를 포함한 여러 언어와의 외부 함수 인터페이스가 있으며, Python 이외의 언어로 바인딩을 명시적으로 작성해야 합니다.

설계.

CPython의 특별한 기능은 각 CPython 인터프리터 프로세스에서 글로벌인터프리터 록(GIL)을 사용하는 것입니다.이는 단일 프로세스 내에서 한 [2]번에 하나의 스레드만 Python 바이트 코드를 처리할 수 있음을 의미합니다.이는 멀티스레딩에 포인트가 없는 것이 아닙니다.가장 일반적인 멀티스레딩 시나리오는 스레드가 외부 프로세스가 완료될 때까지 대부분 대기하는 경우입니다.

이 문제는 여러 스레드가 개별 클라이언트에 서비스를 제공할 때 발생할 수 있습니다.한 스레드는 클라이언트의 응답을 기다리고 다른 스레드는 데이터베이스 쿼리가 실행되기를 기다리는 반면 세 번째 스레드는 실제로 Python 코드를 처리합니다.

그러나 GIL은 여러 코어로 분산될 수 있는 Python 코드로 CPU 집약적인 알고리즘을 구현하는 프로세스에는 적합하지 않다는 것을 의미합니다.

실제 어플리케이션에서는 GIL이 중대한 병목현상이 되는 상황은 매우 드뭅니다.이는 Python이 본질적으로 느린 언어이기 때문에 CPU를 많이 사용하거나 시간에 민감한 작업에는 일반적으로 사용되지 않기 때문입니다.Python은 일반적으로 최상위 수준에서 사용되며 라이브러리의 함수를 호출하여 특수한 작업을 수행합니다.이러한 라이브러리는 일반적으로 Python으로 작성되지 않으며, 이러한 기본 프로세스 중 하나에 대한 호출이 발생하는 동안 다른 스레드의 Python 코드를 실행할 수 있습니다.CPU 부하가 높은 태스크를 수행하기 위해 호출되는 비 Python 라이브러리는 GIL의 대상이 아니며 여러 프로세서에서 제한 없이 여러 스레드를 동시에 실행할 수 있습니다.

Python 코드의 동시성은 멀티태스킹 운영체제에 의해 관리되는 별도의 CPython 인터프리터 프로세스에서만 달성할 수 있습니다.이는 동시 Python 프로세스 간의 통신을 복잡하게 만들지만, 멀티프로세서 모듈이 이를 다소 완화시켜 줍니다. 즉, 동시 Python 코드 실행의 이점을 얻을 수 있는 애플리케이션은 제한된 의 오버헤드로 구현될 수 있습니다.

GIL의 존재는 CPython의 구현을 단순화하고 동시 Python 코드 실행의 혜택을 받지 않는 멀티 스레드 애플리케이션을 쉽게 구현할 수 있도록 합니다.그러나 GIL이 없으면 다중 처리 앱은 모든 공통 코드가 스레드 세이프인지 확인해야 합니다.

GIL을 제거하기 위한 많은 제안이 제기되었지만, 대부분의 경우 GIL의 장점이 단점보다 크다는 것이 일반적인 의견의 일치입니다. GIL이 병목 현상인 소수의 경우, 애플리케이션은 다중 처리 구조를 중심으로 구축되어야 합니다.

역사

공복 제비

비적재 스왈로우(Unload Swallow)는 CPython의 최적화 브랜치로서, 완전한 호환성과 현저한 고속화를 목적으로 하고 있습니다.이 회사는 CPython의 커스텀 가상 머신을 LLVM을 사용하여 구축된 적시 컴파일러로 보완함으로써 목표를 달성하고자 했습니다.

프로젝트에서는 CPython보다 [3]5배 빠른 속도 향상을 목표로 하고 있었지만,[4] 이 목표는 달성되지 않았습니다.

이 프로젝트는 구글에 의해 후원되었고 프로젝트 소유자인 Thomas Wouters, Jeffrey Yasskin, Collin Winter는 구글의 정규직 직원이지만 대부분의 프로젝트 참여자들은 구글 [5]직원이 아니었다.공차 스왈로우는 구글 [6]코드에서 호스팅되었습니다.

Python 언어에 관한 많은 것들과 마찬가지로, Unlading Swallow라는 이름은 Monty Python과 Holy Grail에 있는 빈 제비의 속도 속도에 대한 농담에서 따온 것입니다.

공개된 목표에는 미치지 못했지만 Unladen Swallow는 cPickle [7]모듈의 개선 등 Python의 주요 구현에 추가된 몇 가지 코드를 만들었습니다.

2010년 7월, 일부 관측통들은 2009년 4분기 이정표가 [8]아직 발표되지 않았기 때문에 이 프로젝트가 죽었는지 아니면 죽었는지에 대해 추측했다.Unladen의 메일링 리스트의 트래픽은 2010년 1월 500건에서 2010년 [9]9월 10건 미만으로 감소했습니다.언라덴은 또한 구글의 [10]자금 지원을 잃었다고 보도되었다.2010년 11월, 주요 개발자 중 한 명이 "제프리와 나는 구글에 더 중요한 다른 프로젝트에 착수했습니다."[11]라고 발표했습니다.

2009년 Q4 개발 브랜치는 2010년 [12]1월 26일에 설립되었지만, Web 사이트에서는 어떠한 광고도 행해지지 않았습니다.또한, 장기적인 계획에 관해, 그리고 프로젝트가 Python 2.7 릴리즈를 놓치면서 Python Enhancement Proposal(PEP)[4]받아들여졌고, Python 공식 저장소의 특별한 py3k-jit 분기에 Unlading Swallow를 병합할 것을 제안했습니다.이 작업은 2010년 7월 현재 진행 [13]중입니다.Unladen Swallow는 원래 Python 2.6에[14] 기반하고 있으며 Python 3는 호환성을 잃었기 때문에 이 병합에는 시간이 좀 걸렸습니다(자세한 내용은 Python 3000 참조).그러나 PEP는 이후 철회되었다.

2011년 초, 이 프로젝트가 [15]중지된 것이 분명해졌다.

비적재 제비 방출 기록

  • 2009년[16] 1분기
  • 2009년[17] 2분기
  • 2009년 3분기: 메모리 사용량 절감, 속도 향상[18]

분배

공식적으로 지원되는 Tier-1 플랫폼은 Windows, LinuxMacOS(및 하위 계층S390x용 Lasberry Pi OS 및 Linux)입니다.

다음과 [19]같은 플랫폼이 실장되어 있습니다.

Unix와 같은
스페셜 및 임베디드
다른.

PEP[20] 11은 Python 소프트웨어 Foundation에서 지원되지 않는 플랫폼을 나열합니다.이러한 플랫폼은 외부 포트에서 계속 지원할 수 있습니다.이러한 포트는 다음과 같습니다.

  • AtherOS(2.6 이후 지원되지 않음)
  • BeOS(2.6 이후 지원되지 않음)
  • DOS (2.0 이후 지원되지 않음)
  • IRIX 4 (2.3 이후 지원되지 않음)
  • IRIX 5 이후(3.2, 3.[21]7 이후 지원되지 않음)
  • Mac OS 9 (2.4 이후 지원되지 않음)
  • MINIX(2.3 이후 지원되지 않음)
  • OpenVMS(3.3 이후 지원되지 않음)
  • OS/2(3.3 이후 지원되지 않음)
  • RISC OS(3.0 이후 지원되지 않음)
  • Windows XP(3.5 이후 지원되지 않음)
  • Windows 2000(3.3 이후 지원되지 않음)
  • Windows 3.x (2.0 이후 지원되지 않음)
  • Windows 9x (2.6 이후 지원되지 않음)
  • Windows NT4 (2.6 이후 지원되지 않음)

Python Software Foundation의 CPython 공식 버전에 통합되지 않은 외부 포트에는 PSP 및 SMS 및 S60용 카메라 API와 같은 플랫폼별 기능을 위한 추가 모듈이 포함되어 있습니다.이러한 포트는 다음과 같습니다.

엔터프라이즈 리눅스

이러한 Python 버전은 현재 지원되는 엔터프라이즈 Linux [29]배포판과 함께 배포됩니다.표에서 Python의 지원 상태는 배포 유지관리자가 아닌 Python 핵심 팀의 지원을 의미합니다.

엔터프라이즈 리눅스
배포 버전 유통 종료 Python 버전
Ubuntu 20.04 LTS (Focal Foss 2030-04년[30][needs update] [31] 이전[32] 버전이지만 유지 보수: 3.8
Ubuntu 18.04 LTS (바이오닉 비버) 2028-04[33] 이전[34] 버전, 유지 보수 불필요: 2.7 이전 버전, 더 이상 유지 보수하지 않음[35]: 3.6
Ubuntu 16.04 LTS (Xenial Xerus) 2021-04-30[36][needs update] 이전[34] 버전, 유지 보수 불필요: 2.7 이전[35] 버전, 유지 보수 불필요: 3.5
데비안 11 2026-06[37] 이전[37] 버전이지만 유지 보수: 3.9
데비안 10 2024-06년[38] 이전[39] 버전, 유지 보수 불필요: 2.7 이전[40] 버전이지만 유지 보수: 3.7
데비안 9 2022-06-30[41][needs update] 이전[42] 버전, 유지 보수 불필요: 2.7 이전[43] 버전, 유지 보수 불필요: 3.5
Red Hat Enterprise Linux 8 2029 이전[44] 버전, 유지 보수 불필요: 2.7 이전 버전, 더 이상 유지 보수하지 않음: 3.6
Red Hat Enterprise Linux 7 2024-11-30[45] 이전[46] 버전, 유지 보수 불필요: 2.7
CentOS 8 2029-05-31 이전 버전, 유지 보수 불필요: 2.7 이전 버전, 더 이상 유지 보수하지 않음: 3.6
CentOS 7 2024-06-30 이전[47] 버전, 유지 보수 불필요: 2.7
SUSE Linux Enterprise Server 15 2031-07-31 이전[48] 버전, 유지 보수 불필요: 2.7 이전 버전, 더 이상 유지 보수하지 않음: 3.6
SUSE Linux Enterprise Server 12 2027-10-31 이전[49] 버전, 유지 보수 불필요: 2.7
SUSE Linux Enterprise Server 11 2022-03-31[needs update] 이전[49] 버전, 유지 보수 불필요: 2.7
범례:
구버전
이전 버전, 아직 유지 관리됨
최신 버전
최신 프리뷰 버전
향후 출시

대체 수단

CPython은 Java Virtual Machine(JVM; Java 가상 머신)용 Java로 작성Jython, RPython으로 작성된 Cypy, 공용 언어 인프라용 C#으로 작성IronPython을 포함한 여러 "생산 품질의" Python 구현 중 하나입니다.몇 가지 실험적인 [50]구현도 있습니다.

레퍼런스

  1. ^ "Python 3.10.5 is now available". 6 June 2022. Retrieved 7 June 2022.
  2. ^ "Initialization, Finalization, and Threads". Python v3.8.3 documentation. Retrieved 2020-06-04.
  3. ^ Paul, Ryan (2009-03-26). "Ars Technica report on Unladen Swallow goals". Arstechnica.com. Retrieved 2011-08-19.
  4. ^ a b Winter, Collin; Yasskin, Jeffrey; Kleckner, Reid (2010-03-17). "PEP 3146 - Merging Unladen Swallow into CPython". Python.org.
  5. ^ "People working on Unladen Swallow". Archived from the original on 2015-10-29. Retrieved 2019-08-08.
  6. ^ "Unladen Swallow project page". Retrieved 2011-08-19.
  7. ^ "Issue 9410: Add Unladen Swallow's optimizations to Python 3's pickle. - Python tracker". bugs.python.org. Retrieved 2019-08-08.
  8. ^ "Message on comp.lang.python". Retrieved 2011-08-19.
  9. ^ "Unladen Swallow Google Groups". Retrieved 2011-08-19.
  10. ^ "reddit post by an Unladen committer". Reddit.com. 2010-06-24. Retrieved 2011-08-19.
  11. ^ Winter, Collin (8 November 2010). "Current status of Unladen-Swallow".
  12. ^ "2009 Q4 release branch creation". 2010-01-26. Retrieved 2011-08-19.
  13. ^ "Developers focus on merge into py3k-jit". 2010-07-13. Retrieved 2011-08-19.
  14. ^ "Unladen Swallow baseline". Python.org. Retrieved 2011-08-19.
  15. ^ Kleckner, Reid (26 March 2011). "Unladen Swallow Retrospective". QINSB is not a Software Blog (qinsb.blogspot.com).
  16. ^ "Unladen Swallow 2009Q1". unladen-swallow, A faster implementation of Python. Retrieved 19 October 2012.
  17. ^ "Unladen Swallow 2009Q2". unladen-swallow, A faster implementation of Python. Retrieved 19 October 2012.
  18. ^ "Unladen Swallow 2009Q3". unladen-swallow, A faster implementation of Python. Retrieved 19 October 2012.
  19. ^ "PythonImplementations". Retrieved 19 July 2012.
  20. ^ "PEP 11 -- Removing support for little used platforms". Python.org. Retrieved 2019-08-08.
  21. ^ "Irix still supported?".
  22. ^ 아미가 피톤
  23. ^ i시리즈 Python
  24. ^ PythonD
  25. ^ http://yellowblue.free.fr/yiki/doku.php/en:dev:python:start Python 2 3
  26. ^ 스택리스 Python for PSP
  27. ^ Python Windows CE 포트
  28. ^ "Python". VSI. Retrieved 2021-08-31.
  29. ^ https://linuxlifecycle.com
  30. ^ "Ubuntu release cycle". Ubuntu. Retrieved 2021-01-18.
  31. ^ "With Python 2 EOL'ed, Ubuntu 20.04 LTS Moves Along With Its Python 2 Removal - Phoronix". www.phoronix.com. Retrieved 2020-04-01.
  32. ^ "Binary package "python3" in ubuntu focal". Launchpad.net.
  33. ^ "Ubuntu 18.04 extended to 2028". ServerWatch.com. 2018-11-15. Retrieved 2019-09-09.
  34. ^ a b "python-defaults package : Ubuntu". Canonical Ltd. 2018-06-08. Retrieved 2018-06-08.
  35. ^ a b "python3-defaults package : Ubuntu". Canonical Ltd. 2018-06-08. Retrieved 2018-06-08.
  36. ^ Science, Carnegie Mellon University School of Computer. "Ubuntu 16.04 - End of Life in 2021 - SCS Computing Facilities - Carnegie Mellon University". computing.cs.cmu.edu. Retrieved 2021-02-15.
  37. ^ a b "Debian -- News -- Debian 11 "bullseye" released". www.debian.org. Retrieved 2022-01-04.
  38. ^ "LTS - Debian Wiki". wiki.debian.org. Retrieved 2021-02-15.
  39. ^ "Debian -- Details of package python in buster". packages.debian.org. Retrieved 2019-09-13.
  40. ^ "Debian -- News -- Debian 10 "buster" released". www.debian.org. Retrieved 2019-08-09.
  41. ^ "Debian -- News -- Debian 8 Long Term Support reaching end-of-life". www.debian.org. Retrieved 2021-02-15.
  42. ^ "DistroWatch.com: Debian". DistroWatch.com. 2017-10-15. Retrieved 2017-10-15.
  43. ^ "Debian -- Details of package python3 in stretch". Retrieved 2017-12-19.
  44. ^ "Python in RHEL 8". Red Hat Developer Blog. 2018-11-14. Archived from the original on 2019-05-10. Retrieved 2019-05-10.
  45. ^ "Red Hat Enterprise Linux Life Cycle". Red Hat Customer Portal. Retrieved 2020-04-01.
  46. ^ "DistroWatch.com: Red Hat Enterprise Linux". DistroWatch.com. 2017-09-07. Retrieved 2017-10-15.
  47. ^ "DistroWatch.com: CentOS". DistroWatch.com. 2017-09-14. Retrieved 2017-10-15.
  48. ^ "Release Notes SUSE Linux Enterprise Desktop/SUSE Linux Enterprise Workstation Extension 15 GA". www.suse.com. Retrieved 2019-08-08.
  49. ^ a b "DistroWatch.com: openSUSE". DistroWatch.com. 2017-10-14. Retrieved 2017-10-15.
  50. ^ Martelli, Alex (2006). Python in a Nutshell (2nd ed.). O'Reilly. pp. 5–7. ISBN 978-0-596-10046-9.

추가 정보

  • Shaw, Anthony (2021). CPython Internals: Your Guide to the Python 3 Interpreter. Real Python. ISBN 9781775093343.

외부 링크