質問

ギルはPythonインタープリターごとに(ここでもStackoverflowでも)人々が話しているのをよく見ます。

しかし、ソースコードで見たのは、GILがグローバル変数であるため、各Pythonプロセスにすべての通訳者に1つのGILがあるということです。私は彼らがこれをしたことを知っています。なぜなら、LUAやTCLのように通過する通訳オブジェクトが渡されていないからです。最初はうまく設計されていませんでした。また、スレッドローカルストレージは、Pythonの人が使用するためにポータブルではないようです。

これは正しいです?ここでプロジェクトで使用している2.4バージョンを少し見ました。

これは、特に3.0で、後のバージョンで変更されましたか?

役に立ちましたか?

解決

ギルは確かにプロセスごとではなく、インタープレーターではありません。これは3.xで変更されていません。

他のヒント

おそらく、ほとんどの人がPythonがプロセスごとに1つのインタープリターを持っていると想定しているため、混乱は生じます。 C APIを介した複数の通訳者のサポートがほとんどテストされておらず、ほとんど使用されていなかったことを読んだことを思い出します。 (そして、私がそれを試してみたとき、正しく動作しませんでした。)

私は、各プロセスが最大で1つのcpythonインタープリターが埋め込まれている可能性があることは真実だと思います(他のランタイムには異なる制約がある場合があります)。これがギル自体の問題であるかどうかはわかりませんが、グローバルな状態によるものであるか、サードパーティCモジュールの矛盾するグローバルな状態から保護する可能性があります。から cpython APIドキュメント:

py ___ initialize()]は、2回目の呼び出された場合のNo-opです(py_finalize()first)。返品値はありません。初期化が失敗した場合、致命的なエラーです。

あなたはに興味があるかもしれません 不自由なツバメ プロジェクトは、最終的にCpythonから完全にギルを削除することを目指しています。他のPythonランタイムはギルをまったく持っていません(私は信じています) スタックレスパイソン, 、そして確かに ジャイソン.

また、ギルはそうであることに注意してください Cpython 3.xにまだ存在します.

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top