0

IPython アーキテクチャの概要ドキュメントから、次のことがわかります...

IPython エンジンは、ネットワーク接続を介して Python コマンドを受け取る Python インスタンスです。

Python インスタンスであるということは、これらのエンジンがスタンドアロン プロセスであることを意味しますか? のようなコマンドを使用して、一連のエンジンを手動でロードできますipcluster start -n 4。このようにエンジンを作成することは、何らかの親プロセスの子プロセスを作成することと見なされますか?それとも、IPC 通信に依存して作業を完了する一連の独立したプロセスを開始するための単なる手段と見なされますか? コマンドを介してエンジンを呼び出すこともできますipengine。これは、実際には何の関係もなく、OS コマンド ラインに直接入力されるため、確実にスタンドアロンです。

背景として、Pythonスクリプトからクライアントを介して操作された多くのIPythonエンジンが、そのスクリプトで開始された別のプロセスとどのように相互作用するかを掘り下げようとしています。

4

1 に答える 1

1

関連するプロセスを見つける簡単な方法は次のとおりです。コントローラーとエンジンを起動する前に現在のプロセスのリストを出力し、起動後にリストを出力します。wmic仕事を終わらせるためのコマンドがあります...

C:\>wmic process get description,executablepath

興味深いことに、コントローラーは 5 つの Python プロセスを実行し、各エンジンは 1 つの追加の Python プロセスを作成します。したがって、この調査から、エンジンはそれ自体のプロセスであり、コントローラーであることもわかりました...

C:\>wmic process get description,executablepath | findstr ipengine
ipengine.exe                   C:\Python34\Scripts\ipengine.exe
ipengine.exe                   C:\Python34\Scripts\ipengine.exe

C:\>wmic process get description,executablepath  | findstr ipcontroller
ipcontroller.exe               C:\Python34\Scripts\ipcontroller.exe

一見すると、それらはすべてスタンドアロンのように見えますが、OS の実行中のプロセス リストには、親子関係に関する限り、プロセスがどのように関連しているかについての情報は含まれていないと思います。それは、OS で追跡される表現を持たない開発者のみの形式主義かもしれませんが、どちらの方法でも、この種の内部構造についてはわかりません。 ipcontroller および ipengine から存在する Python インスタンス

これは、この質問に直接対処する MinRK からの決定的な引用です。

「すべてのエンジンは独自の分離されたプロセスです...各カーネルは個別のプロセスであり、任意のマシンに配置できます...ターミナル IPython セッションを開始したようなもので、すべてのエンジンは個別の IPython セッションです。a=5 を実行する場合これでは a=10 で、この男は 10 で、この男は 5 です。」

これは、親子プロセスを実際に追跡する ProcessExplorer の使用について言及した ServerFaultに関する優れた SE Hot Network Questionに触発された、さらに決定的な検証です...

Process Explorer は、Microsoft が管理する Sysinternals ツールです。プロセスのプロパティ ダイアログにプロセスのコマンド ラインとそれを起動した親を表示できますが、そのプロセスの名前は表示されない場合があります。――コロディアス

別のコマンド ウィンドウでさらにエンジンを起動すると、ProcessExplorer のそのセクションがスクリーンショットに表示されているとおりに複製されます。 プロセスの個別の ipcontroller と ipengine トリガー

完全を期すために、コマンドipcluster start --n=5は次のようになります... プロセスの IP クラスター トリガー

于 2015-05-28T22:48:20.813 に答える