2009-04-16 13 views
15

なぜサブインタープリタAPIが存在するのか、それがなぜmod_wsgi apacheモジュールのようなモジュールで使われているのか不明です。これは主に、同じプロセス内で実行されている異なるアプリケーション用のセキュリティサンドボックスを作成するために使用されていますか?それとも、複数のスレッドで同時実行を許可する方法ですか?多分両方?他の目的はありますか?CPythonでのサブインタープリタAPIの目的は何ですか?

答えて

14

私は別のPython実行環境を作成することを想像しています。たとえば、mod_wsgi(Apache Pythonモジュール)は、単一のPythonインタープリタをホストし、サブインタープリタ内の複数のアプリケーションをホストします(デフォルト構成)。

documentationからいくつかのキーポイント:

  • これは、Pythonコードを実行するための(ほぼ)完全に独立した環境です。特に、新しいインタプリタは、基本モジュール__builtin__,__main__およびsysを含む、インポートされたすべてのモジュールの独立したバージョンを別々に持っています。
  • ロードされたモジュール(sys.modules)とモジュール検索パス(sys.path)のテーブルも別です。
  • サブインタープリタ(およびメインインタプリタ)は同じプロセスの一部であるため、それらの間の絶縁は完全ではありません。たとえば、os.close()などの低レベルファイル操作を使用すると、(間違ってまたは悪意のある)は、お互いの開いているファイルに影響します。
  • (サブ)インタープリタ間で拡張機能が共有されるため、一部の拡張機能が正しく動作しないことがあります。これは特に、拡張モジュールが(静的な)グローバル変数を使用しているとき、または拡張モジュールがその初期化の後にそのモジュールの辞書を操作するときにそうです。
+0

これは、異なるインタプリタが異なるスレッドで同時に実行できることを意味しますか?私は同じプロセス内の異なる通訳者が同じGILを共有しているかどうかはまだ不明です。 –

+3

GILはプロセスのグローバルオブジェクトであり、サブインタープリタ間で共有されます。そうではありませんが、同時に実行することはできません。 http://objectmix.com/python/377035-multiple-independent-python-interpreters-c-c-program.html – codeape

+0

リンクありがとうございます!私は、PythonとGILのスレッディングの限界を回避する方法があるかどうかを判断しようとしています。 –

0

私が最後に理解されるように、考え方は同じプロセス内で複数のアプリケーション、ならびに同じアプリケーションの複数のコピーを実行できるようにしました。

これは、多くの拡張機能は、複数のインタプリタセーフではありませんので、それはpythonで破るなど、

他のスクリプト言語(例えばTCL)で見つかった機能であり、GUIビルダーに特に有用である、Webサーバ1つの通訳者の行動が別の通訳者の変数に影響する可能性があります。

関連する問題