Stackless Python、またはStacklessは、Pythonプログラミング言語のインタープリタでした。そのGitHubリポジトリは2025年2月以降アーカイブされており、プロジェクトは正式に終了しています。
Stackless Python は、独自のスタックにC のコールスタックに依存しないことから、そのように名付けられました。実際には、Stackless Python は C スタックを使用しますが、関数呼び出しの間にスタックがクリアされます。 [ 2 ] Stackless の最も顕著な機能はマイクロスレッドであり、通常のオペレーティングシステムのスレッドに関連するオーバーヘッドの多くを回避します。Python の機能に加えて、Stackless はコルーチン、通信チャネル、タスクのシリアル化のサポートも追加します。
Stackless Pythonでは、実行中のプログラムはマイクロスレッドに分割され、それらはオペレーティングシステムのカーネルではなく、言語インタープリタ自体によって管理されます。コンテキスト切り替えとタスクスケジューリングは完全にインタープリタ内で行われます(そのため、これらはグリーンスレッドの一種ともみなされます)。マイクロスレッドは、同じCPUコア上でプログラム内の異なるサブタスクの実行を管理します。したがって、イベントベースの非同期プログラミングの代替手段となり、シングルコアプログラムで個別のスレッドを使用する際のオーバーヘッドも回避できます(ユーザーモードとカーネルモード間のモード切り替えが不要なため、CPU使用率を削減できます)。
マイクロスレッドによって単一コア上でサブタスクの実行が容易になるものの、Stackless PythonはCPythonのグローバルインタプリタロック(GIL)を削除せず、複数のスレッドやプロセスも使用しません。そのため、共有CPU上での協調マルチタスクのみが可能で、並列処理はできません(プリエンプションは当初利用できませんでしたが、現在は何らかの形で利用可能です[ 3 ])。複数のCPUコアを使用するには、Stackless Pythonプロセス上にプロセス間通信システムを構築する必要があります。
ソースコードにかなりの数の変更が加えられているため、Stackless Python は既存の Python インストール環境に拡張機能やライブラリとしてインストールすることはできません。Stackless Python はそれ自体が完全な Python ディストリビューションです。Stackless の機能の大部分は、自己ホスト型のPython インタープリタおよびJIT コンパイラであるPyPyにも実装されています。[ 4 ]
Stackless 全体は独立したディストリビューションですが、その切り替え機能はgreenlet と呼ばれるCPython拡張機能としてパッケージ化されています。 [ 5 ]これは、CPython のグリーンスレッドソリューションを提供するために、いくつかのライブラリ (gevent [ 6 ]など)で使用されています。Python はその後、単一スレッドで実行される非同期プログラミングのための代替ネイティブソリューションであるawait /async を受け取りました。
Stacklessは、大規模マルチプレイヤーオンラインゲーム「Eve Online」の実装や、IronPortのメールプラットフォームで広く使用されています。
ラウンドロビン スケジューラが組み込まれています。タスクレットを協調的に、またはプリエンプティブにスケジュールするために使用できます。