CPython - CPython

CPython
Python -logo og wordmark.svg
Originale forfattere Guido van Rossum
Utvikler (er) Python -kjerneutviklere og Python -samfunnet, støttet av Python Software Foundation
Første utgivelse 26. januar 1994 ; 27 år siden ( 1994-01-26 )
Stabil utgivelse
3.10.0 / 4. oktober 2021 ; 6 dager siden ( 2021-10-04 )
Oppbevaringssted https://github.com/python/cpython
Skrevet inn C , Python
Plattform 42 plattformer; se § Distribusjon
Tilgjengelig i Engelsk
Type Tolk for programmering av Python
Tillatelse Python Software Foundation -lisens
Nettsted www .python .org

CPython er referanseimplementeringen av programmeringsspråket Python . Skrevet i C og Python, er CPython standard og mest brukte implementering av Python -språket.

CPython kan defineres som både en tolk og en kompilator ettersom den kompilerer Python -kode til bytekode før den tolkes. Den har et fremmed funksjonsgrensesnitt med flere språk, inkludert C, der man eksplisitt må skrive bindinger på et annet språk enn Python.

Design

Et spesielt trekk ved CPython er at det gjør bruk av en global tolk lås (GIL) på hver CPython tolk prosess , noe som betyr at i en enkelt prosess, kan bare én tråd skal behandle Python bytekode på et gitt tidspunkt. Dette betyr ikke at det ikke er noen vits i multithreading ; det vanligste multithreading -scenariet er hvor tråder stort sett venter på at eksterne prosesser skal fullføres.

Dette kan skje når flere tråder betjener separate klienter. En tråd kan vente på at en klient skal svare, og en annen kan vente på at en databasespørring skal utføres, mens den tredje tråden faktisk behandler Python -kode.

GIL betyr imidlertid at CPython ikke er egnet for prosesser som implementerer CPU-intensive algoritmer i Python-kode som potensielt kan distribueres over flere kjerner.

I virkelige applikasjoner er situasjoner der GIL er en betydelig flaskehals ganske sjeldne. Dette er fordi Python er et iboende sakte språk og vanligvis ikke brukes til CPU-intensive eller tidssensitive operasjoner. Python brukes vanligvis på øverste nivå og kaller funksjoner i biblioteker for å utføre spesialiserte oppgaver. Disse bibliotekene er vanligvis ikke skrevet i Python, og Python -kode i en annen tråd kan utføres mens et anrop til en av disse underliggende prosessene finner sted. Det ikke-Python-biblioteket som blir kalt til å utføre den CPU-intensive oppgaven, er ikke underlagt GIL og kan samtidig utføre mange tråder på flere prosessorer uten begrensninger.

Samtidig bruk av Python -kode kan bare oppnås med separate CPython -tolkeprosesser som administreres av et multitasking -operativsystem . Dette kompliserer kommunikasjonen mellom samtidige Python -prosesser , selv om flerbehandlingsmodulen demper dette noe; det betyr at applikasjoner som virkelig kan dra nytte av samtidig utførelse av Python-kode kan implementeres med en begrenset mengde overhead .

Tilstedeværelsen av GIL forenkler implementeringen av CPython, og gjør det enklere å implementere flertrådede applikasjoner som ikke har fordeler av samtidig utførelse av Python-kode. Uten GIL må imidlertid flerbehandlingsapper sørge for at all vanlig kode er trådsikker.

Selv om det er kommet mange forslag for å eliminere GIL, har den generelle konsensus vært at fordelene ved GIL i de fleste tilfeller oppveier ulempene; i de få tilfellene der GIL er en flaskehals, bør programmet bygges rundt flerbehandlingsstrukturen.

Historie

Ulastet svelg

Unladen Swallow var en optimaliseringsgren av CPython, ment å være fullt kompatibel og betydelig raskere. Den hadde som mål å nå sine mål ved å supplere CPythons tilpassede virtuelle maskin med en akkurat-i-tid-kompilator bygget med LLVM .

Prosjektet hadde angitt et mål om en hastighetsforbedring med en faktor fem i forhold til CPython; dette målet ble ikke nådd.

Prosjektet ble sponset av Google , og prosjekteeierne, Thomas Wouters, Jeffrey Yasskin og Collin Winter, er Google-ansatte på heltid; De fleste prosjektbidragsyterne var imidlertid ikke Google -ansatte. Unladen Swallow ble hostet på Google Code .

Som mange andre ting om Python -språket, er navnet Unladen Swallow en Monty Python -referanse, spesielt til vitsen om lufthastigheten til ulastede sveler i Monty Python og den hellige gral .

Selv om det manglet alle publiserte mål, produserte Unladen Swallow noen kode som ble lagt til i den viktigste Python -implementeringen, for eksempel forbedringer av cPickle -modulen.

I juli 2010 spekulerte noen observatører på om prosjektet var dødt eller døende siden milepælen i fjerde kvartal 2009 ennå ikke hadde blitt frigitt. Trafikken på Unladens postliste hadde gått ned fra 500 meldinger i januar 2010 til færre enn 10 i september 2010. Det har også blitt rapportert at Unladen mistet Googles finansiering. I november 2010 kunngjorde en av hovedutviklerne at "Jeffrey og jeg har blitt trukket videre til andre prosjekter av høyere betydning for Google".

Utviklingsgrenen for fjerde kvartal 2009 ble opprettet 26. januar 2010, men det ble ikke annonsert på nettstedet. Når det gjelder de langsiktige planene, og ettersom prosjektet savnet Python 2.7-utgivelsen, ble et Python Enhancement Proposal (PEP) akseptert, som foreslo en sammenslåing av Unladen Swallow til en spesiell py3k-jit-gren av Pythons offisielle depot . Fra juli 2010 pågikk dette arbeidet. Denne sammenslåingen ville ha tatt litt tid siden Unladen Swallow opprinnelig var basert på Python 2.6 som Python 3 brøt kompatibilitet med (se Python 3000 for flere detaljer). Imidlertid ble PEP senere trukket tilbake.

Tidlig i 2011 ble det klart at prosjektet ble stoppet.

Utladningshistorikk for ulastet svelging

  • 2009 1. kvartal
  • 2009 2. kvartal
  • 2009 Q3: reduser minnebruk, forbedre hastigheten

Fordeling

Støttede plattformer inkluderer:

Unix-aktig
Spesielt og innebygd
Annen

PEP 11 viser plattformer som ikke støttes i CPython av Python Software Foundation . Disse plattformene kan fortsatt støttes av eksterne porter. Disse portene inkluderer:

  • AtheOS (støttes ikke siden 2.6)
  • BeOS (støttes ikke siden 2.6)
  • DOS (støttes ikke siden 2.0)
  • IRIX 4 (støttes ikke siden 2.3)
  • IRIX 5 og nyere (støttes ikke siden 3.2, 3.7)
  • Mac OS 9 (støttes ikke siden 2.4)
  • MINIX (støttes ikke siden 2.3)
  • OpenVMS (støttes ikke siden 3.3)
  • OS/2 (støttes ikke siden 3.3)
  • RISC OS (støttes ikke siden 3.0)
  • Windows XP (støttes ikke siden 3.5)
  • Windows 2000 (støttes ikke siden 3.3)
  • Windows 3.x (støttes ikke siden 2.0)
  • Windows 9x (støttes ikke siden 2.6)
  • Windows NT4 (støttes ikke siden 2.6)

Eksterne porter som ikke er integrert i Python Software Foundations offisielle versjon av CPython, med lenker til hovedutviklingsstedet, inkluderer ofte tilleggsmoduler for plattformspesifikke funksjoner, som grafikk og lyd-API for PSP og SMS og kamera-API for S60. Disse portene inkluderer:

Enterprise Linux

Disse Python-versjonene distribueres med nåværende støttede Linux-distribusjoner for bedrifter. Støttestatusen til Python i tabellen refererer til støtte fra Python -kjerneteamet, og ikke fra distribusjonsopprettholderen.

Enterprise Linux
Distribusjonsversjon Distribusjon slutten av livet Python -versjon
Ubuntu 20.04 LTS (Focal Fossa) 2030-04 Eldre versjon, men likevel vedlikeholdt: 3.8
Ubuntu 18.04 LTS (Bionic Beaver) 2028-04 Gammel versjon, ikke lenger vedlikeholdt: 2.7 Eldre versjon, men likevel vedlikeholdt: 3.6
Ubuntu 16.04 LTS (Xenial Xerus) 2021-04-30 Gammel versjon, ikke lenger vedlikeholdt: 2.7 Gammel versjon, ikke lenger vedlikeholdt: 3.5
Debian 10 2024-06 Gammel versjon, ikke lenger vedlikeholdt: 2.7 Eldre versjon, men likevel vedlikeholdt: 3.7
Debian 9 2022-06-30 Gammel versjon, ikke lenger vedlikeholdt: 2.7 Gammel versjon, ikke lenger vedlikeholdt: 3.5
Red Hat Enterprise Linux 8 2029 Gammel versjon, ikke lenger vedlikeholdt: 2.7 Eldre versjon, men likevel vedlikeholdt: 3.6
Red Hat Enterprise Linux 7 2024-11-30 Gammel versjon, ikke lenger vedlikeholdt: 2.7
CentOS 8 2029-05-31 Gammel versjon, ikke lenger vedlikeholdt: 2.7 Eldre versjon, men likevel vedlikeholdt: 3.6
CentOS 7 2024-06-30 Gammel versjon, ikke lenger vedlikeholdt: 2.7
SUSE Linux Enterprise Server 15 2031-07-31 Gammel versjon, ikke lenger vedlikeholdt: 2.7 Eldre versjon, men likevel vedlikeholdt: 3.6
SUSE Linux Enterprise Server 12 2027-10-31 Gammel versjon, ikke lenger vedlikeholdt: 2.7
SUSE Linux Enterprise Server 11 2022-03-31 Gammel versjon, ikke lenger vedlikeholdt: 2.7
Legende:
Gammel versjon
Eldre versjon, fortsatt vedlikeholdt
Siste versjon
Siste forhåndsversjon
Fremtidig utgivelse

Alternativer

CPython er en av flere Python-implementeringer av "produksjonskvalitet", inkludert: Jython , skrevet i Java for Java virtual machine (JVM), PyPy , skrevet i RPython og oversatt til C, og IronPython , som er skrevet i C# for Common Language Infrastruktur . Det er også flere eksperimentelle implementeringer.

Referanser

Videre lesning

  • Shaw, Anthony (2021). CPython Internals: Din guide til Python 3 -tolk . Ekte Python. ISBN 9781775093343.

Eksterne linker