0

IPython 架构概述文档中,我们知道...

IPython 引擎是一个 Python 实例,它通过网络连接接收 Python 命令。

鉴于它是一个 Python 实例,这是否意味着这些引擎是独立的进程?我可以通过类似的命令手动加载一组引擎ipcluster start -n 4。因此,创建引擎是否被认为是创建某个父进程的子进程,或者仅仅是启动一组依赖 IPC 通信完成工作的独立进程的一种方式?我还可以通过命令调用引擎,该ipengine命令肯定是独立的,因为它直接输入到操作系统命令行中,与任何东西都没有任何关系。

作为背景,我试图深入研究通过客户端从 python 脚本操作的许多 IPython 引擎如何与在该脚本中启动的另一个进程交互。

4

1 回答 1

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

从外观上看,它们似乎都是独立的,尽管我不认为操作系统的运行进程列表包含任何关于进程如何相关的信息,就父/子关系而言。这可能是开发人员唯一的形式主义,没有在操作系统中跟踪的表示,但我不知道这些内部结构如何知道。 来自 ipcontroller 和 ipengine 的 Python 实例

这是MinRK的明确引用,直接解决了这个问题:

“每个引擎都是它自己的独立进程......每个内核都是一个单独的进程,可以在任何机器上......就像你启动了一个终端 IPython 会话,每个引擎都是一个单独的 IPython 会话。如果你做 a=5在这个中,a=10 在那个中,这个人有 10 个,这个人有 5 个。”

这是进一步明确的验证,灵感来自关于 ServerFault 的一个很棒的 SE热门网络问题,其中提到了使用 ProcessExplorer,它实际上跟踪父子进程......

Process Explorer 是 Microsoft 维护的 Sysinternals 工具。它可以在进程的属性对话框中显示进程的命令行以及启动它的父进程,尽管该进程的名称可能不再可用。——科罗迪亚斯

如果我在另一个命令窗口中启动更多引擎,则 ProcessExplorer 的该部分将与您在屏幕截图中看到的完全相同。 分离 ipcontroller 和 ipengine 触发进程

只是为了完整起见,这里的命令ipcluster start --n=5看起来像...... 进程的IP集群触发

于 2015-05-28T22:48:20.813 回答