Cpython

CPython is the reference implementation of the Python programming language.

Written in C and Python, CPython is the default and most widely used implementation of the Python language.

CPython
Original author(s)Guido van Rossum
Developer(s)Python core developers and the Python community, supported by the Python Software Foundation
Initial release26 January 1994; 30 years ago (1994-01-26)
Stable release
3.12.0 Edit this on Wikidata / 2 October 2023; 6 months ago (2 October 2023)
Repositoryhttps://github.com/python/cpython
Written inC, Python
Platform42 platforms; see § Distribution
Available inEnglish
TypePython Programming Language Interpreter
LicensePython Software Foundation License
Websitewww.python.org

CPython can be defined as both an interpreter and a compiler as it compiles Python code into bytecode before interpreting it. It has a foreign function interface with several languages, including C, in which one must explicitly write bindings in a language other than Python.

Design

A particular feature of CPython is that it makes use of a global interpreter lock (GIL) on each CPython interpreter process, which means that within a single process, only one thread may be processing Python bytecode at any one time. This does not mean that there is no point in multithreading; the most common multithreading scenario is where threads are mostly waiting on external processes to complete.

This can happen when multiple threads are servicing separate clients. One thread may be waiting for a client to reply, and another may be waiting for a database query to execute, while the third thread is actually processing Python code.

However, the GIL does mean that CPython is not suitable for processes that implement CPU-intensive algorithms in Python code that could potentially be distributed across multiple cores.

In real-world applications, situations where the GIL is a significant bottleneck are quite rare. This is because Python is an inherently slow language and is generally not used for CPU-intensive or time-sensitive operations. Python is typically used at the top level and calls functions in libraries to perform specialized tasks. These libraries are generally not written in Python, and Python code in another thread can be executed while a call to one of these underlying processes takes place. The non-Python library being called to perform the CPU-intensive task is not subject to the GIL and may concurrently execute many threads on multiple processors without restriction.

Concurrency of Python code can only be achieved with separate CPython interpreter processes managed by a multitasking operating system. This complicates communication between concurrent Python processes, though the multiprocessing module mitigates this somewhat; it means that applications that really can benefit from concurrent Python-code execution can be implemented with limited overhead.

The presence of the GIL simplifies the implementation of CPython, and makes it easier to implement multi-threaded applications that do not benefit from concurrent Python code execution. However, without a GIL, multiprocessing apps must make sure all common code is thread safe.

Although many proposals have been made to eliminate the GIL, the general consensus has been that in most cases, the advantages of the GIL outweigh the disadvantages; in the few cases where the GIL is a bottleneck, the application should be built around the multiprocessing structure. To help allow more parallelism, an improvement was released in October 2023 to allow a separate GIL per subinterpreter in a single Python process and have been described as "threads with opt-in sharing".

After several debates, a project was launched in 2023 to propose making the GIL optional from version 3.13 of Python, which is scheduled for release in October 2024.

History

Unladen Swallow

Unladen Swallow was an optimization branch of CPython, intended to be fully compatible and significantly faster. It aimed to achieve its goals by supplementing CPython's custom virtual machine with a just-in-time compiler built using LLVM.

The project had stated a goal of a speed improvement by a factor of five over CPython; this goal was not met.

The project was sponsored by Google, and the project owners, Thomas Wouters, Jeffrey Yasskin, and Collin Winter, are full-time Google employees; however, most project contributors were not Google employees. Unladen Swallow was hosted on Google Code.

Like many things regarding the Python language, the name Unladen Swallow is a Monty Python reference, specifically to the joke about the airspeed velocity of unladen swallows in Monty Python and the Holy Grail.

Although it fell short of all published goals, Unladen Swallow did produce some code that got added to the main Python implementation, such as improvements to the cPickle module.

In July 2010, some observers speculated on whether the project was dead or dying since the 2009 Q4 milestone had not yet been released. The traffic on Unladen's mailing list had decreased from 500 messages in January 2010 to fewer than 10 in September 2010. It has also been reported that Unladen lost Google's funding. In November 2010, one of the main developers announced that "Jeffrey and I have been pulled on to other projects of higher importance to Google."

The 2009 Q4 development branch was created on 26 January 2010, but no advertising was made on the website. Further, regarding the long-term plans, and as the project missed the Python 2.7 release, a Python Enhancement Proposal (PEP) was accepted, which proposed a merge of Unladen Swallow into a special py3k-jit branch of Python's official repository. As of July 2010, this work was ongoing. This merging would have taken some time, since Unladen Swallow was originally based on Python 2.6 with which Python 3 broke compatibility (see Python 3000 for more details). However, the PEP was subsequently withdrawn.

In early 2011, it became clear that the project was stopped.

Unladen Swallow release history

  • 2009 Q1
  • 2009 Q2
  • 2009 Q3: reduce memory use, improve speed

Distribution

Officially supported tier-1 platforms are Windows, Linux, and macOS. (Also Raspberry Pi OS, and Linux for s390x on lower tier.)

More platforms have working implementations, including:

    Unix-like
    Special and embedded
    Other

PEP 11 lists platforms which are not supported in CPython by the Python Software Foundation. These platforms can still be supported by external ports. These ports include:

External ports not integrated to Python Software Foundation's official version of CPython, with links to its main development site, often include additional modules for platform-specific functionalities, like graphics and sound API for PSP and SMS and camera API for S60. These ports include:

Enterprise Linux

These Python versions are distributed with currently-supported enterprise Linux distributions. The support status of Python in the table refers to support from the Python core team, and not from the distribution maintainer.

Enterprise Linux
Distribution version Distribution end-of-life Python version
Ubuntu 22.04 LTS (Jammy Jellyfish) 3.10 [1]
Ubuntu 20.04 LTS (Focal Fossa) 2030-04[needs update] Older version, yet still maintained: 3.8
Ubuntu 18.04 LTS (Bionic Beaver) 2028-04 Old version, no longer maintained: 2.7 Old version, no longer maintained: 3.6
Ubuntu 16.04 LTS (Xenial Xerus) 2021-04-30[needs update] Old version, no longer maintained: 2.7 Old version, no longer maintained: 3.5
Debian 12 2028-06 Older version, yet still maintained: 3.11
Debian 11 2026-06 Older version, yet still maintained: 3.9
Debian 10 2024-06 Old version, no longer maintained: 2.7 Older version, yet still maintained: 3.7[needs update]
Debian 9 2022-06-30[needs update] Old version, no longer maintained: 2.7 Old version, no longer maintained: 3.5
Red Hat Enterprise Linux 8 2029 Old version, no longer maintained: 2.7 Old version, no longer maintained: 3.6
Red Hat Enterprise Linux 7 2024-11-30 Old version, no longer maintained: 2.7
CentOS 8 2029-05-31 Old version, no longer maintained: 2.7 Old version, no longer maintained: 3.6
CentOS 7 2024-06-30 Old version, no longer maintained: 2.7
SUSE Linux Enterprise Server 15 2031-07-31 Old version, no longer maintained: 2.7 Old version, no longer maintained: 3.6
SUSE Linux Enterprise Server 12 2027-10-31 Old version, no longer maintained: 2.7
SUSE Linux Enterprise Server 11 2022-03-31[needs update] Old version, no longer maintained: 2.7
Legend:
Old version
Older version, still maintained
Latest version
Latest preview version
Future release

Alternatives

CPython is one of several "production-quality" Python implementations including: Jython, written in Java for the Java virtual machine (JVM), PyPy, written in RPython and translated into C, and IronPython, which is written in C# for the Common Language Infrastructure. There are also several experimental implementations.

References

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

Tags:

Cpython DesignCpython HistoryCpython DistributionCpython AlternativesCpython Further readingCpythonC (programming language)Python (programming language)Reference implementation

🔥 Trending searches on Wiki English:

Joe BidenDawn of the Planet of the ApesWrexham A.F.C.Shingō, AomoriMia KhalifaColumbia UniversityBob MarleyMaya RudolphHigh-Tech Employee Antitrust LitigationAaron Taylor-JohnsonLily JamesFallout 3Arsenal F.C.Robert Downey Jr.2024 AFC Futsal Asian CupSex and the City2019 Indian general electionMain PageFallout (series)The Tortured Poets DepartmentEmily BluntRusso-Ukrainian WarAlbert EinsteinBenjamin FranklinTupac ShakurDavid BowieNorthrop Grumman B-2 SpiritJessica KordaJames VI and IAna de ArmasMelissa BarreraCanvaHiroyuki SanadaKorean WarThe Watchers (film)Harrison FordKathleen FerrierIndian National CongressClint EastwoodLeslie UggamsGoogle Translate.xxxTaiwanBaldwin IV of JerusalemDirlewanger BrigadeVarshangalkku SheshamTitanicCassandra NovaFrank SinatraKingdom of the Planet of the ApesList of FA Cup finalsJohn LennonWinston ChurchillNullJ. Robert OppenheimerAnyone but YouWilliam Temple FranklinDarwin BlanchLewis HamiltonJoe AlwynList of prime ministers of IndiaInvincible (TV series)Lord ByronYG MarleyJoJo SiwaSandra Oh2024 Indian general election in Uttar PradeshMia Goth2024 Iranian strikes in IsraelSanju SamsonCoral CastleInstagramAndrew Scott (actor)Drake BellDouble or Nothing (2024)The Spiderwick Chronicles (TV series)Deadpool (film)🡆 More