私は、Pythonのグローバルインタープリタロックが実際にどのように動作するのか不思議です。私がC++アプリケーションを起動した場合、Pythonスクリプトの4つのインスタンスが別々のコア上で並列に実行されるか、GILは起動された単一のプロセスだけでなく、それを生成したプロセスに関係なくすべてのPythonプロセスを制御します?別々のpythonプロセスを実行するとGILを回避できますか?
9
A
答えて
20
GILは、1つのプロセス内のスレッドにのみ影響します。 multiprocessing
モジュールは実際にはthreading
の代わりになっており、Pythonプログラムで複数のコアを使用できるようにしています& c。あなたのシナリオでは複数のコアも簡単に使用できます。
1
Alex Martelliは、複数のプロセスを実行することでGILを避けることができると指摘しています.GILはPythonの一般的な実装ではなく(CPython)この制限なしにPythonを実装してください。 Stackless Pythonが気になります。
+0
これはスタックレスに関するよくある誤解です。スタックレスは複数のコアを利用するのに役立ちません。 http://www.stackless.com/pipermail/stackless/2007-August/001963.htmlを参照してください。 –
今日は私が大変助けてくれると確信しています。ありがとう! – whatWhat
あなたは大歓迎です! –
Pythonアプリケーションの "Plain Old Unix Pipeline"は、多くの場合、複数のスレッドより優れた設計です。 プロセスのパイプラインは、すべてのGILの問題を回避します。また、使用しているライブラリの潜在的なスレッド安全性の問題を回避します。シェルを使用して簡単に作成できます。 OSはsys.stdinから読み込み、sys.stdoutに書き込むだけで同期を処理します。 –