IPython.parallel不使用多核?

2024-05-29 01:35:34 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在试验IPython.parallel,只想在不同的引擎上启动几个shell命令。在

我有以下笔记本:

第0单元格:

from IPython.parallel import Client
client = Client()
print len(client)
5

然后启动命令:

单元格1:

^{pr2}$

单元格2:

%%px --targets 1 --noblock
!python mincemeat.py 127.0.0.1

单元格3:

%%px --targets 2 --noblock
!python mincemeat.py 127.0.0.1

它所做的是使用MapReduce的^{}实现。当我启动第一个!python mincemeat.py 127.0.0.1时,它使用大约100%的一个核心,然后当我启动第二个时,它会下降到50%。我有4个核心(+虚拟核心)在机器上,可以使用他们时,直接从终端启动,但不是在笔记本电脑。在

我有什么遗漏吗?我想为每个!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%的内核。我做错什么了?在


Tags: inpy命令client核心forparallelipython
1条回答
网友
1楼 · 发布于 2024-05-29 01:35:34

聊天讨论摘要:

CPU affinity是一种将进程固定到特定CPU核心的机制, Python进程在这里的进程数是numpy,它有时会导致CPU的导入, 作为链接到特定BLAS库的结果。通过运行此单元,可以取消固定所有引擎:

%%px
import os
import psutil
from multiprocessing import cpu_count

p = psutil.Process(os.getpid())
p.set_cpu_affinity(range(cpu_count()))
print p.get_cpu_affinity()

它使用multiprocessing.cpu_count来获取CPU的数量,然后将每个引擎与所有CPU关联起来。在

IPython笔记本exploring the issue。在

相关问题 更多 >

    热门问题