这是找出所涉及的进程的简单方法,在我启动控制器和引擎之前打印当前进程的列表,然后在它们被启动后打印列表。有一个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
从外观上看,它们似乎都是独立的,尽管我不认为操作系统的运行进程列表包含任何关于进程如何相关的信息,就父/子关系而言。这可能是开发人员唯一的形式主义,没有在操作系统中跟踪的表示,但我不知道这些内部结构如何知道。
![来自 ipcontroller 和 ipengine 的 Python 实例](https://i.stack.imgur.com/r6IZq.png)
这是MinRK的明确引用,直接解决了这个问题:
“每个引擎都是它自己的独立进程......每个内核都是一个单独的进程,可以在任何机器上......就像你启动了一个终端 IPython 会话,每个引擎都是一个单独的 IPython 会话。如果你做 a=5在这个中,a=10 在那个中,这个人有 10 个,这个人有 5 个。”
这是进一步明确的验证,灵感来自关于 ServerFault 的一个很棒的 SE热门网络问题,其中提到了使用 ProcessExplorer,它实际上跟踪父子进程......
Process Explorer 是 Microsoft 维护的 Sysinternals 工具。它可以在进程的属性对话框中显示进程的命令行以及启动它的父进程,尽管该进程的名称可能不再可用。——科罗迪亚斯
如果我在另一个命令窗口中启动更多引擎,则 ProcessExplorer 的该部分将与您在屏幕截图中看到的完全相同。
![分离 ipcontroller 和 ipengine 触发进程](https://i.stack.imgur.com/SIpTh.png)
只是为了完整起见,这里的命令ipcluster start --n=5
看起来像......
![进程的IP集群触发](https://i.stack.imgur.com/eH4uf.png)