从IPython Architecture Overview文档我们知道......
IPython引擎是一个Python实例,它通过网络连接获取Python命令。
鉴于它是一个Python实例,这意味着这些引擎是独立的进程吗?我可以通过ipcluster start -n 4
之类的命令手动加载一组引擎。这样做是创建引擎被认为是创建一些父进程的子进程,还是只是一种启动依赖IPC通信来完成工作的独立进程的方法?我也可以通过ipengine
命令来调用引擎,这个命令肯定是独立的,因为它直接输入到OS命令行,与任何事情无关。
作为背景我正在尝试深入研究如何通过python脚本中的客户端操作的许多IPython引擎将与该脚本中启动的另一个进程进行交互。
答案 0 :(得分:1)
这是一个简单的方法来找出所涉及的过程,在我关闭控制器和引擎之前打印当前进程的列表,然后在它们被触发后打印列表。有一个wmic
命令可以完成工作......
C:\>wmic process get description,executablepath
有趣的是,控制器获得了5个python进程,每个引擎都创建了一个额外的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
从它的外观来看,它们看起来都是独立的,但我不认为操作系统的运行进程列表中包含有关进程如何关联的任何信息,就父/子关系而言。这可能只是开发人员的形式主义,没有在操作系统中跟踪的表示形式,但我不知道这些内部结构要么知道这两种方式。
以下是MinRK的权威quote直接解决了这个问题:
“每个引擎都是自己独立的进程......每个内核都是独立的 进程,可以在任何机器上...就像你启动了一个终端IPython会话,每个引擎都是一个单独的IPython会话。如果你在这一个中做a = 5,那个a = 10,那个家伙有10个这个家伙有5个。“
这是进一步明确的验证,受到ServerFault上一个很棒的SE Hot Network Question的启发,它提到了使用ProcessExplorer来实际跟踪父子进程......
Process Explorer是Microsoft维护的Sysinternals工具。它 可以在进程中显示进程的命令行 属性对话框以及启动它的父级,尽管如此 该进程的名称可能不再可用。 --Corrodias
如果我在另一个命令窗口中触发更多引擎,那么ProcessExplorer的一部分就像你在屏幕截图中看到的完全重复一样。
只是为了完整,这里'命令ipcluster start --n=5
看起来像......