zer*_*ozf 11 python mapreduce ipython ipython-notebook ipython-parallel
我正在试验,IPython.parallel
只是想在不同的引擎上启动几个shell命令.
我有以下笔记本:
单元格0:
from IPython.parallel import Client
client = Client()
print len(client)
5
Run Code Online (Sandbox Code Playgroud)
并启动命令:
单元格1:
%%px --targets 0 --noblock
!python server.py
Run Code Online (Sandbox Code Playgroud)
单元格2:
%%px --targets 1 --noblock
!python mincemeat.py 127.0.0.1
Run Code Online (Sandbox Code Playgroud)
单元格3:
%%px --targets 2 --noblock
!python mincemeat.py 127.0.0.1
Run Code Online (Sandbox Code Playgroud)
它的作用是使用mincemeat
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
Run Code Online (Sandbox Code Playgroud)
单元格2:
%%px --targets 0 --noblock
a = 0
for i in xrange(100000):
for j in xrange(10000):
a += 1
Run Code Online (Sandbox Code Playgroud)
我想我错过了一些东西.我相信这两个单元应该运行一个不同的内核(如果可用).但是,似乎并非如此.CPU使用率再次显示它们共享相同的核心并使用50%的核心.我做错了什么?
min*_*nrk 15
聊天讨论摘要:
CPU亲和性是一种将进程固定到特定CPU内核的机制,这里的问题是,有时导入numpy最终可能会将Python进程固定到CPU 0,这是因为链接特定的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()
Run Code Online (Sandbox Code Playgroud)
它采用multiprocessing.cpu_count
获得CPU的数量,然后用所有的CPU每引擎相关联.
探索这个问题的IPython笔记本.
归档时间: |
|
查看次数: |
4040 次 |
最近记录: |