我正在试验IPython.parallel
并且只想在不同的引擎上启动几个 shell 命令。
我有以下笔记本:
单元格 0:
from IPython.parallel import Client
client = Client()
print len(client)
5
并启动命令:
单元格 1:
%%px --targets 0 --noblock
!python server.py
单元格 2:
%%px --targets 1 --noblock
!python mincemeat.py 127.0.0.1
单元格 3:
%%px --targets 2 --noblock
!python mincemeat.py 127.0.0.1
它所做的是使用mincemeat
MapReduce 的实现。当我启动第!python mincemeat.py 127.0.0.1
一个内核时,它使用了大约 100% 的一个内核,然后当我启动第二个内核时,每个内核的使用率下降到 50%。我的机器上有 4 个内核(+虚拟内核),可以在直接从终端启动时使用它们,但不能在 Notebook 中使用。
有什么我想念的吗?我想每个!python mincemeat.py 127.0.0.1
命令使用一个核心。
编辑:
为清楚起见,这是不使用多核的另一件事:
单元格 1:
%%px --targets 0 --noblock
a = 0
for i in xrange(100000):
for j in xrange(10000):
a += 1
单元格 2:
%%px --targets 0 --noblock
a = 0
for i in xrange(100000):
for j in xrange(10000):
a += 1
我想我错过了一些东西。我相信如果可用的话,这两个单元应该运行一个不同的内核。然而,情况似乎并非如此。CPU 使用率再次表明它们共享相同的内核并使用 50%。我做错什么了?