CPython

ウィキペディアから、無料の百科事典
ナビゲーションにジャンプ 検索にジャンプ
CPython
Pythonのロゴとwordmark.svg
原作者グイドヴァンロッサム
開発者Pythonコア開発者とPythonコミュニティ、PythonSoftwareFoundationによってサポートされています
初回リリース1994年1月26日; 28年前 (1994-01-26)
安定リリース
3.10.5 [1] ウィキデータでこれを編集する /2022年6月6日; 5日前 (6 June 2022)
リポジトリhttps://github.com/python/cpython
で書かれているCPython
プラットホーム42プラットフォーム; §配布を参照してください
で利用可能英語
タイプPythonプログラミング言語インタプリタ
ライセンスPythonSoftwareFoundationライセンス
Webサイトwww .python .org

CPythonPythonプログラミング言語のリファレンス実装です。CおよびPythonで記述されたCPythonは、Python言語のデフォルトで最も広く使用されている実装です。

CPythonは、 Pythonコードを解釈する前にバイトコードにコンパイルするため、インタープリターコンパイラーの両方として定義できますこれには、Cを含むいくつかの言語との外部関数インターフェースがあり、Python以外の言語で バインディングを明示的に記述する必要があります。

デザイン

CPythonの特定の機能は、各CPythonインタープリタープロセスでグローバルインタープリターロック(GIL)を利用することです。つまり、単一のプロセス内で、一度に1つのスレッドのみがPythonバイトコードを処理できます。[2]これは、マルチスレッドに意味がないことを意味するものではありません最も一般的なマルチスレッドのシナリオは、スレッドが主に外部プロセスの完了を待機している場合です。

これは、複数のスレッドが別々のクライアントにサービスを提供している場合に発生する可能性があります。3番目のスレッドが実際にPythonコードを処理している間に、 1つのスレッドがクライアントの応答を待機し、別のスレッドがデータベースクエリの実行を待機している可能性があります。

ただし、GILは、CPythonが、複数のコアに分散される可能性のあるPythonコードでCPUを集中的に使用するアルゴリズムを実装するプロセスには適していないことを意味します。

実際のアプリケーションでは、GILが重大なボトルネックになる状況は非常にまれです。これは、Pythonが本質的に低速な言語であり、通常、CPUを集中的に使用する操作や時間に敏感な操作には使用されないためです。Pythonは通常、トップレベルで使用され、ライブラリ内の関数を呼び出して特殊なタスクを実行します。これらのライブラリは通常Pythonで記述されておらず、これらの基盤となるプロセスの1つが呼び出されている間に、別のスレッドのPythonコードを実行できます。CPUを集中的に使用するタスクを実行するために呼び出されるPython以外のライブラリは、GILの対象ではなく、制限なしに複数のプロセッサで多数のスレッドを同時に実行できます。

Pythonコードの同時実行性は、マルチタスクオペレーティングシステムによって管理される個別のCPythonインタープリタープロセスでのみ実現できますマルチプロセッシングモジュールはこれをいくらか軽減しますが、これは並行Pythonプロセス間の通信を複雑にします。これは、Pythonコードの同時実行から実際に恩恵を受けることができるアプリケーションを、限られたオーバーヘッドで実装できることを意味します。

GILの存在により、CPythonの実装が簡素化され、Pythonコードの同時実行の恩恵を受けないマルチスレッドアプリケーションの実装が容易になります。ただし、GILがない場合、マルチプロセッシングアプリは、すべての一般的なコードがスレッドセーフであることを確認する必要があります。

GILを排除するために多くの提案がなされてきましたが、一般的なコンセンサスは、ほとんどの場合、GILの長所が短所を上回っていることです。GILがボトルネックになっているいくつかのケースでは、アプリケーションはマルチプロセッシング構造を中心に構築する必要があります。

歴史

UnladenSwallow

Unladen Swallowは、CPythonの最適化ブランチであり、完全な互換性と大幅な高速化を目的としています。これは、CPythonのカスタム仮想マシンをLLVMを使用して構築されジャストインタイムコンパイラで補完することにより、その目標を達成することを目的としていました

プロジェクトは、CPythonよりも5倍速度を向上させるという目標を表明していました。[3]この目標は達成されませんでした。[4]

このプロジェクトはGoogleが後援し、プロジェクトの所有者であるThomas Wouters、Jeffrey Yasskin、CollinWinterはGoogleのフルタイムの従業員です。ただし、ほとんどのプロジェクト貢献者はGoogleの従業員ではありませんでした。[5] UnladenSwallowはGoogleCodeでホストされていました。[6]

Python言語に関する多くのことと同様に、Unladen Swallowという名前は、Monty Python参照であり、特にMontyPythonとHolyGrailでのUnladenSwallowの対気速度に関するジョークを表しています。

公開されているすべての目標には達しませんでしたが、Unladen Swallowは、cPickleモジュールの改善など、メインのPython実装に追加されたコードをいくつか生成しました。[7]

2010年7月、一部のオブザーバーは、2009年第4四半期のマイルストーンがまだ発表されていないため、プロジェクトが死んでいるか死んでいるかについて推測しました。[8] Unladenのメーリングリストのトラフィックは2010年1月の500メッセージから2010年9月には10未満に減少しました。[9] UnladenがGoogleの資金を失ったことも報告されています。[10] 2010年11月、主要な開発者の1人が、「ジェフリーと私は、Googleにとってより重要な他のプロジェクトに引き込まれた」と発表しました。[11]

2009年第4四半期の開発ブランチは2010年1月26日に作成されましたが[12]、Webサイトには広告が掲載されていません。さらに、長期計画に関しては、プロジェクトがPython 2.7リリースを見逃したため、Python拡張提案(PEP)[4]が承認され、UnladenSwallowをPythonの公式リポジトリの特別なpy3k-jitブランチにマージすることが提案されました。2010年7月現在、この作業は進行中です。[13] UnladenSwallowは元々Python2.6 [14]に基づいていたため、このマージには時間がかかりました。Python3は互換性を破りました(詳細については、 Python 3000を参照してください)。しかし、PEPはその後撤回されました。

2011年の初めに、プロジェクトが中止されたことが明らかになりました。[15]

UnladenSwallowのリリース履歴

  • 2009年第1四半期[16]
  • 2009年第2四半期[17]
  • 2009 Q3:メモリ使用量を減らし、速度を向上させる[18]

配布

公式にサポートされているティア1プラットフォームは、 WindowsLinux、およびmacOS(および、Raspberry Pi OS、および下位ティア のs390x用のLinux)です。

以下を含む、機能する実装を備えたプラットフォームが他にもあります。[19]

Unixライク
特別で埋め込まれた
他の

PEP 11 [20]には、 PythonSoftwareFoundationによってCPythonでサポートされていないプラットフォームがリストされていますこれらのプラットフォームは、引き続き外部ポートでサポートできます。これらのポートには次のものが含まれます。

  • AtheOS(2.6以降はサポートされていません)
  • BeOS(2.6以降はサポートされていません)
  • DOS(2.0以降はサポートされていません)
  • IRIX 4(2.3以降はサポートされていません)
  • IRIX 5以降(3.2、3.7以降はサポートされていません)[21]
  • 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のグラフィックスやサウンドAPI、S60のカメラAPIなど、プラットフォーム固有の機能のための追加モジュールが含まれていることがよくあります。これらのポートには次のものが含まれます。

EnterpriseLinux

これらのPythonバージョンは、現在サポートされているエンタープライズLinuxディストリビューションとともに配布されます。[29]表のPythonのサポート状況は、ディストリビューションメンテナーからではなく、Pythonコアチームからのサポートを示しています。

エンタープライズLinux
配布版 配布の保守終了 Pythonバージョン
Ubuntu 20.04 LTS(Focal Fossa) 2030-04 [30] [更新が必要] [31] Older version, yet still maintained:3.8 [32]
Ubuntu 18.04 LTS(バイオニックビーバー) 2028-04 [33] Old version, no longer maintained:2.7 [34] Old version, no longer maintained:3.6 [35]
Ubuntu 16.04 LTS(Xenial Xerus) 2021-04-30 [36] [更新が必要] Old version, no longer maintained:2.7 [34] Old version, no longer maintained:3.5 [35]
Debian 11 2026-06 [37] Older version, yet still maintained:3.9 [38]
Debian 10 2024-06 [39] Old version, no longer maintained:2.7 [40] Older version, yet still maintained:3.7 [41]
Debian 9 2022-06-30 [42] Old version, no longer maintained:2.7 [43] Old version, no longer maintained:3.5 [44]
Red Hat Enterprise Linux 8 2029年 Old version, no longer maintained:2.7 [45] Old version, no longer maintained:3.6
Red Hat Enterprise Linux 7 2024-11-30 [46] Old version, no longer maintained:2.7 [47]
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 [48]
SUSE Linux Enterprise Server 15 2031-07-31 Old version, no longer maintained:2.7 [49] Old version, no longer maintained:3.6
SUSE Linux Enterprise Server 12 2027-10-31 Old version, no longer maintained:2.7 [50]
SUSE Linux Enterprise Server 11 2022-03-31 [更新が必要] Old version, no longer maintained:2.7 [51]
Legend:
古いバージョン
古いバージョン、まだ維持されています
最新バージョン
Latest preview version
Future release

代替案

CPythonは、 Java仮想マシン(JVM)用にJavaで記述されたJython 、 RPythonで記述されてCに変換されたPyPy共通言語用にC#で記述されたIronPythonなど、いくつかの「本番品質」のPython実装の1つです。インフラストラクチャいくつかの実験的な実装もあります。[52]

参照

  1. ^ 「Python3.10.5が利用可能になりました」2022年6月6日2022年6月7日取得
  2. ^ 「初期化、ファイナライズ、およびスレッド」Pythonv3.8.3のドキュメント2020年6月4日取得
  3. ^ ポール、ライアン(2009-03-26)。「ArsTechnicaがUnladenSwallowの目標について報告します」Arstechnica.com 2011年8月19日取得
  4. ^ a b 冬、コリン; ヤスキン、ジェフリー; Kleckner、Reid(2010-03-17)。「PEP3146-UnladenSwallowをCPythonにマージする」Python.org。
  5. ^ 「UnladenSwallowに取り組んでいる人々」2015-10-29にオリジナルからアーカイブされました2019年8月8日取得
  6. ^ 「UnladenSwallowプロジェクトページ」2011年8月19日取得
  7. ^ 「問題9410:UnladenSwallowの最適化をPython3のピクルスに追加します。-Pythonトラッカー」bugs.python.org 2019年8月8日取得
  8. ^ 「comp.lang.pythonのメッセージ」2011年8月19日取得
  9. ^ 「UnladenSwallow|Googleグループ」2011年8月19日取得
  10. ^ 「Unladenコミッターによるreddit投稿」Reddit.com。2010-06-24 2011年8月19日取得
  11. ^ 冬、コリン(2010年11月8日)。「Unladen-Swallowの現在のステータス」
  12. ^ 「2009年第4四半期リリースブランチの作成」2010-01-26 2011年8月19日取得
  13. ^ 「開発者はpy3k-jitへのマージに焦点を合わせています」2010-07-13 2011年8月19日取得
  14. ^ 「UnladenSwallowベースライン」Python.org 2011年8月19日取得
  15. ^ Kleckner、Reid(2011年3月26日)。「UnladenSwallowRetrospective」QINSBはソフトウェアブログ(qinsb.blogspot.com)ではありません。
  16. ^ 「UnladenSwallow2009Q1」unladen-swallow、Pythonのより高速な実装2012年10月19日取得
  17. ^ 「UnladenSwallow2009Q2」unladen-swallow、Pythonのより高速な実装2012年10月19日取得
  18. ^ 「UnladenSwallow2009Q3」unladen-swallow、Pythonのより高速な実装2012年10月19日取得
  19. ^ 「PythonImplementations」2012年7月19日取得
  20. ^ 「PEP11-ほとんど使用されていないプラットフォームのサポートを削除する」Python.org 2019年8月8日取得
  21. ^ 「Irixはまだサポートされていますか?」
  22. ^ AmigaPython
  23. ^ iSeriesPython
  24. ^ PythonD
  25. ^ http://yellowblue.free.fr/yiki/doku.php/en:dev:python:startPython2および3
  26. ^ PSP用のスタックレスPython
  27. ^ PythonWindowsCEポート
  28. ^ 「Python」VSI 2021-08-31を取得
  29. ^ https://linuxlifecycle.com
  30. ^ 「Ubuntuリリースサイクル」Ubuntu 2021年1月18日取得
  31. ^ 「Python2がEOL化されると、Ubuntu20.04LTSはPython2の削除に伴い移動します-Phoronix」www.phoronix.com 2020年4月1日取得
  32. ^ 「ubuntufocusのバイナリパッケージ"python3"」Launchpad.net
  33. ^ 「Ubuntu18.04は2028に拡張されました」ServerWatch.com。2018-11-15 2019-09-09を取得しました。
  34. ^ a b "python-defaultsパッケージ:Ubuntu"CanonicalLtd.2018-06-08 2018年6月8日取得
  35. ^ a b "python3-defaultsパッケージ:Ubuntu"CanonicalLtd.2018-06-08 2018年6月8日取得
  36. ^ 科学、カーネギーメロン大学コンピュータ学部。「Ubuntu16.04-2021年の保守終了-SCSコンピューティング施設-カーネギーメロン大学」Computing.cs.cmu.edu 2021-02-15を取得
  37. ^ 「Debian-ニュース-Debian11「bullseye」がリリースされました」www.debian.org 2022-01-04を取得
  38. ^ 「Debian-ニュース-Debian11「bullseye」がリリースされました」www.debian.org 2022-01-04を取得
  39. ^ 「LTS-DebianWiki」wiki.debian.org 2021-02-15を取得
  40. ^ 「Debian-バスターのパッケージpythonの詳細」packages.debian.org 2019年9月13日取得
  41. ^ 「Debian-ニュース-Debian10「バスター」がリリースされました」www.debian.org 2019年8月9日取得
  42. ^ 「Debian-ニュース-Debian8の長期サポートが終了しました」www.debian.org 2021-02-15を取得
  43. ^ 「DistroWatch.com:Debian」DistroWatch.com。2017-10-15 2017年10月15日取得
  44. ^ 「Debian-ストレッチのパッケージpython3の詳細」2017年12月19日取得
  45. ^ 「RHEL8のPython」RedHat開発者ブログ2018-11-14 2019年5月10日取得
  46. ^ 「RedHatEnterpriseLinuxライフサイクル」RedHatカスタマーポータル2020年4月1日取得
  47. ^ 「DistroWatch.com:Red HatEnterpriseLinux」DistroWatch.com。2017-09-07 2017年10月15日取得
  48. ^ 「DistroWatch.com:CentOS」DistroWatch.com。2017-09-14 2017年10月15日取得
  49. ^ 「リリースノート|SUSELinux Enterprise Desktop / SUSE Linux Enterprise WorkstationExtension15GA」www.suse.com 2019年8月8日取得
  50. ^ 「DistroWatch.com:openSUSE」DistroWatch.com。2017-10-14 2017年10月15日取得
  51. ^ 「DistroWatch.com:openSUSE」DistroWatch.com。2017-10-14 2017年10月15日取得
  52. ^ Martelli、Alex(2006)。一言で言えばPython(第2版)。オライリーpp。5–7。ISBN 978-0-596-10046-9

さらに読む

  • ショー、アンソニー(2021)。CPython Internals:Python3インタープリターのガイド本物のPython。ISBN 9781775093343

外部リンク