CPython - CPython - Wikipedia
Tento článek má několik problémů. Prosím pomozte zlepšit to nebo diskutovat o těchto otázkách na internetu diskusní stránka. (Zjistěte, jak a kdy tyto zprávy ze šablony odebrat) (Zjistěte, jak a kdy odstranit tuto zprávu šablony)
|
Původní autoři | Guido van Rossum |
---|---|
Vývojáři | Vývojáři jádra Pythonu a komunita Pythonu, podporovaní Softwarová nadace Python |
První vydání | 26. ledna 1994 |
Stabilní uvolnění | 3.8.6 / 24. září 2020 |
Úložiště | https://github.com/python/cpython |
Napsáno | C, Krajta |
Plošina | 42 platforem; vidět § Rozdělení |
K dispozici v | Angličtina |
Typ | Tlumočník programovacího jazyka Python |
Licence | Licence Python Software Foundation |
webová stránka | www |
CPython je referenční implementace z Programovací jazyk Python. Napsáno C a Python, CPython je výchozí a nejpoužívanější implementace jazyka.
CPython lze definovat jako oba tlumočník a a překladač při kompilaci kódu v Pythonu bytecode před jeho interpretací. Má to rozhraní cizí funkce s několika jazyky včetně C, ve kterých se musí výslovně psát vazby v jiném jazyce než Python.
Design
Zvláštní vlastností CPythonu je, že využívá a globální tlumočník zámek (GIL) na každém tlumočníkovi CPython proces, což znamená, že v rámci jednoho procesu může zpracovávat bajtový kód Pythonu v jednom okamžiku pouze jedno vlákno.[1] To neznamená, že nemá smysl multithreading; nejběžnějším scénářem s více vlákny je situace, kdy vlákna většinou čekají na dokončení externích procesů.
Představte si například, když tři vlákna obsluhují samostatné klienty. Jedno vlákno může čekat na odpověď klienta, jiné může čekat na spuštění databázového dotazu, zatímco třetí vlákno ve skutečnosti zpracovává kód Pythonu.
GIL však znamená, že CPython není vhodný pro procesy, které implementují algoritmy náročné na CPU v kódu Pythonu, které by mohly být potenciálně distribuovány na více jader.
V aplikacích v reálném světě jsou situace, kdy je GIL významným úzkým místem, poměrně vzácné. Důvodem je, že Python je ze své podstaty pomalý jazyk a obecně se nepoužívá pro operace náročné na CPU nebo časově citlivé operace. Python se obvykle používá na nejvyšší úrovni a k provádění specializovaných úkolů volá funkce v knihovnách. Tyto knihovny obecně nejsou psány v Pythonu a kód Pythonu v jiném vlákně lze spustit, zatímco probíhá volání jednoho z těchto základních procesů. Knihovna jiná než Python, která je volána k provedení úlohy náročné na CPU, nepodléhá GIL a může současně provádět omezení mnoha vláken na více procesorech bez omezení.
Souběžnosti kódu Pythonu lze dosáhnout pouze pomocí samostatných procesů interpretů CPython spravovaných a multitaskingový operační systém. To komplikuje komunikaci mezi souběžnými procesy v Pythonu, ačkoli multiprocesing modul to poněkud zmírňuje; to znamená, že aplikace, které skutečně mohou těžit ze souběžného provádění kódu Pythonu, lze implementovat s omezeným množstvím režie.
Přítomnost GIL zjednodušuje implementaci CPythonu a usnadňuje implementaci vícevláknových aplikací, které nemají prospěch ze souběžného provádění kódu Pythonu. Bez aplikace GIL pro více procesů se však aplikace musí ujistit, že je veškerý běžný kód bezpečný pro vlákna.
Přestože bylo učiněno mnoho návrhů na eliminaci GIL, obecně panuje shoda v tom, že ve většině případů výhody GIL převažují nad nevýhodami; v několika případech, kdy GIL představuje úzké místo, by aplikace měla být postavena na struktuře více procesů.
Dějiny
Prázdná vlaštovka
Prázdná vlaštovka byla optimalizační větev CPython, která měla být plně kompatibilní a výrazně rychlejší. Jeho cílem bylo dosáhnout svých cílů doplněním zvyku CPython virtuální stroj s kompilátor just-in-time postaveno pomocí LLVM.
Projekt stanovil cíl zvýšení rychlosti o pětkrát oproti CPythonu;[2] tento cíl nebyl splněn.[3]
Projekt sponzoroval Google a vlastníci projektu, Thomas Wouters, Jeffrey Yasskin a Collin Winter, jsou zaměstnanci společnosti Google na plný úvazek, avšak většina přispěvatelů do projektu nebyli zaměstnanci společnosti Google.[4] Unladen Swallow byl hostován na Google Code.[5]
Stejně jako mnoho věcí týkajících se jazyka Python je název Unladen Swallow a Monty python odkaz, konkrétně na vtip o rychlosti letu nenaloženého vlaštovky v Monty Python a svatý grál.
Přestože Unladen Swallow nedosáhl všech publikovaných cílů, vytvořil nějaký kód, který byl přidán do hlavní implementace Pythonu, například vylepšení modulu cPickle.[6]
V červenci 2010 někteří pozorovatelé spekulovali o tom, zda byl projekt mrtvý nebo umírá, protože milník čtvrtého čtvrtletí 2009 ještě nebyl zveřejněn.[7] Provoz na seznamu adresátů Unladen se snížil z 500 zpráv v lednu 2010 na méně než 10 v září 2010.[8] Rovněž bylo oznámeno, že Unladen přišel o financování Google.[9] V listopadu 2010 jeden z hlavních vývojářů oznámil, že „Jeffrey a já jsme byli přivedeni k dalším projektům, které mají pro Google vyšší význam“.[10]
Vývojová větev 4. čtvrtletí 2009 byla vytvořena 26. ledna 2010,[11] ale na webu nebyla provedena žádná reklama. Dále, pokud jde o dlouhodobé plány, a jelikož projekt zmeškal vydání Pythonu 2.7, a Návrh na vylepšení Pythonu (ŘÍZ)[3] byl přijat, což navrhlo sloučení Unladen Swallow do speciální pobočky py3k-jit oficiálního úložiště Pythonu. Od července 2010 tato práce pokračovala.[12] Toto sloučení by nějakou dobu trvalo, protože Unladen Swallow byl původně založen na Pythonu 2.6[13] se kterým Python 3 porušil kompatibilitu (viz Python 3000 Více podrobností). PEP však byl následně stažen.
Na začátku roku 2011 se ukázalo, že projekt byl zastaven.[14]
Unladen Swallow historie vydání
Rozdělení
Mezi podporované platformy patří:[18]
- Unixový
- Speciální a vložené
- jiný
- AROS
- OS / 390
- Windows Vista a později
- z / OS[Citace je zapotřebí ]
PEP 11[19] uvádí seznam platforem, které CPython nepodporuje Softwarová nadace Python. Tyto platformy mohou být nadále podporovány externími porty. Mezi tyto porty patří:
- AtheOS (nepodporováno od 2.6)
- BeOS (nepodporováno od 2.6)
- DOS (nepodporováno od 2.0)
- IRIX 4 (nepodporováno od 2.3)
- IRIX 5 a novější (nepodporováno od 3.2, 3.7)[20]
- Mac OS 9 (nepodporováno od 2.4)
- MINIX (nepodporováno od 2.3)
- VMS (nepodporováno od 3.3)
- OS / 2 (nepodporováno od 3.3)
- RISC OS (nepodporováno od 3.0)
- Windows XP (nepodporováno od 3.5)
- Windows 2000 (nepodporováno od 3.3)
- Windows 3.x. (nepodporováno od 2.0)
- Windows 9x (nepodporováno od 2.6)
- Windows NT4 (nepodporováno od 2.6)
Externí porty nejsou integrovány do Softwarová nadace Python Oficiální verze CPythonu s odkazy na jeho hlavní vývojový server často zahrnuje další moduly pro funkce specifické pro platformu, jako je grafické a zvukové API pro PSP a API a kamera pro S60. Mezi tyto porty patří:
- Amiga: AmigaPython[21]
- AS / 400: iSeriesPython[22]
- DOS použitím DJGPP: PythonD[23]
- MorphOS: Python 2 a 3[24]
- PlayStation Portable: Stackless Python pro PSP[25]
- Symbian OS: Python pro S60
- Windows CE /Kapesní PC: Python Windows CE port[26]
Enterprise Linux
Tyto verze Pythonu jsou distribuovány s aktuálně podporovanými podnikovými distribucemi Linuxu.[27] Stav podpory Pythonu v tabulce odkazuje na podporu od základního týmu Pythonu, nikoli od správce distribuce.
Distribuční verze | Rozdělení konec života | Pythonová verze | |
---|---|---|---|
Ubuntu 20,04 LTS (Focal Fossa) | Bude upřesněno | [28] | [29] | 3.8
Ubuntu 18.04 LTS (Bionic Beaver) | 2028-04[30] | [31] | 2.7[32] | 3.6
Ubuntu 16.04 LTS (Xenial Xerus) | 2021-04-30 | [31] | 2.7[32] | 3.5
Debian 10 | 2024 | [33] | 2.7[34] | 3.7
Debian 9 | 2022 | [35] | 2.7[36] | 3.5
Red Hat Enterprise Linux 8 | 2029 | [37] | 2.73.6 |
Red Hat Enterprise Linux 7 | 2024-11-30[38] | [39] | 2.7|
CentOS 8 | 2029-05-31 | 2.7 | 3.6 |
CentOS 7 | 2024-06-30 | [40] | 2.7|
SUSE Linux Enterprise Server 15 | 2031-07-31 | [41] | 2.73.6 |
SUSE Linux Enterprise Server 12 | 2027-10-31 | [42] | 2.7|
SUSE Linux Enterprise Server 11 | 2022-03-31 | [43] | 2.7|
Stará verze Starší verze, stále udržovaná Nejnovější verze |
Alternativy
CPython je jedním z několika „kvality výroby“ Implementace Pythonu počítaje v to: Jython, napsáno v Jáva pro Virtuální stroj Java (JVM), PyPy, napsáno v RPython a přeloženy do C a IronPython, který je napsán v C# pro Společná jazyková infrastruktura. Jsou tu také několik experimentálních implementací.[44]
Reference
- ^ „Inicializace, finalizace a vlákna“. Dokumentace k Pythonu v3.8.3. Citováno 2020-06-04.
- ^ Paul, Ryan (2009-03-26). „Zpráva Ars Technica o cílech Unladen Swallow“. Arstechnica.com. Citováno 2011-08-19.
- ^ A b Winter, Collin; Yasskin, Jeffrey; Kleckner, Reid (2010-03-17). „PEP 3146 - Sloučení nenaloženého vlaštovky do CPythonu“. Python.org.
- ^ „Lidé pracující na vlaku bez nákladu“. Archivovány od originál dne 2015-10-29. Citováno 2019-08-08.
- ^ „Stránka projektu Unladen Swallow“. Code.google.com. Citováno 2011-08-19.
- ^ „Vydání 9410: Přidejte optimalizace Unladen Swallow do nálevu Pythonu 3. - Sledovač Pythonu“. bugs.python.org. Citováno 2019-08-08.
- ^ "Zpráva na comp.lang.python". Groups.google.com. Citováno 2011-08-19.
- ^ „Unladen Swallow | Skupiny Google“. Groups.google.com. Citováno 2011-08-19.
- ^ "reddit příspěvek od nenaloženého zadavatele". Reddit.com. 2010-06-24. Citováno 2011-08-19.
- ^ Winter, Collin (8. listopadu 2010). "Aktuální stav Unladen-Swallow". Google.
- ^ "Vytvoření větve vydání Q4 2009". Code.google.com. 2010-01-26. Citováno 2011-08-19.
- ^ „Vývojáři se zaměřují na sloučení do py3k-jit“. Groups.google.com. 13. 7. 2010. Citováno 2011-08-19.
- ^ „Výchozí hodnota prázdného vlaštovky“. Python.org. Citováno 2011-08-19.
- ^ Kleckner, Reid (26. března 2011). „Retro prázdná vlaštovka“. QINSB není softwarový blog (qinsb.blogspot.com).
- ^ „Unladen Swallow 2009Q1“. unladen-swallow, Rychlejší implementace Pythonu. Citováno 19. října 2012.
- ^ „Unladen Swallow 2009Q2“. unladen-swallow, Rychlejší implementace Pythonu. Citováno 19. října 2012.
- ^ „Unladen Swallow 2009Q3“. unladen-swallow, Rychlejší implementace Pythonu. Citováno 19. října 2012.
- ^ "PythonImplementations". Citováno 19. července 2012.
- ^ „PEP 11 - Odebrání podpory pro málo používané platformy“. Python.org. Citováno 2019-08-08.
- ^ „Irix je stále podporován?“.
- ^ AmigaPython
- ^ iSeriesPython
- ^ PythonD
- ^ http://yellowblue.free.fr/yiki/doku.php/en:dev:python:start Python 2 a 3
- ^ Stackless Python pro PSP
- ^ Python Windows CE port
- ^ https://linuxlifecycle.com
- ^ „S Python 2 EOL'ed se Ubuntu 20.04 LTS pohybuje spolu s odstraněním Pythonu 2 - Phoronix“. www.phoronix.com. Citováno 2020-04-01.
- ^ "Binární balíček" python3 "v ohnisku ubuntu". Launchpad.net.
- ^ „Ubuntu 18.04 rozšířeno na 2028“. ServerWatch.com. 15. 11. 2018. Citováno 2019-09-09.
- ^ A b "balíček python-defaults: Ubuntu". Canonical Ltd. 2018-06-08. Citováno 2018-06-08.
- ^ A b "balíček python3-defaults: Ubuntu". Canonical Ltd. 2018-06-08. Citováno 2018-06-08.
- ^ "Debian - Podrobnosti balíčku python v busteru". packages.debian.org. Citováno 2019-09-13.
- ^ „Debian - Novinky - Debian 10„ buster “vydán“. www.debian.org. Citováno 2019-08-09.
- ^ „DistroWatch.com: Debian“. DistroWatch.com. 15. 10. 2017. Citováno 2017-10-15.
- ^ "Debian - Podrobnosti balíčku python3 v roztažení". Citováno 2017-12-19.
- ^ „Python in RHEL 8“. Blog vývojáře Red Hat. 2018-11-14. Citováno 2019-05-10.
- ^ „Red Hat Enterprise Linux Life Cycle“. Zákaznický portál Red Hat. Citováno 2020-04-01.
- ^ „DistroWatch.com: Red Hat Enterprise Linux“. DistroWatch.com. 07.09.2017. Citováno 2017-10-15.
- ^ „DistroWatch.com: CentOS“. DistroWatch.com. 14. 09. 2017. Citováno 2017-10-15.
- ^ "Poznámky k verzi | SUSE Linux Enterprise Desktop / SUSE Linux Enterprise Workstation Extension 15 GA". www.suse.com. Citováno 2019-08-08.
- ^ „DistroWatch.com: openSUSE“. DistroWatch.com. 14. 10. 2017. Citováno 2017-10-15.
- ^ „DistroWatch.com: openSUSE“. DistroWatch.com. 14. 10. 2017. Citováno 2017-10-15.
- ^ Martelli, Alex (2006). Python v kostce (2. vyd.). O'Reilly. str. 5–7. ISBN 978-0-596-10046-9.