当前位置: 首页 > 面试题库 >

IPython.parallel不使用多核?

鲁财
2023-03-14
问题内容

我正在试验,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个核心(+虚拟核心),当直接从终端启动而不是在笔记本电脑中启动时可以使用它们。

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


问题答案:

聊天讨论摘要:

CPU亲和力是一种将进程固定到特定CPU内核的机制,这里的问题是,有时由于导入特定的BLAS库链接,导入numpy可能最终将Python进程固定到CPU
0。您可以通过运行此单元格取消固定所有引擎:

%%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笔记本探索这个问题。



 类似资料:
  • 我有一个MongoDB版本3.0.3集合,其中包含具有2个字段的文档: 数字长id 我在数组上构建了一个多键索引,并通过使用方法确认该索引存在并且是多键的。但是,当我查询数组中特定字段的2个范围的交集时,Mongo不使用此索引,尽管集合中有1,000,000个文档。我可以从方法的输出中看到这一点。更奇怪的是,当我使用指定索引时,Mongo遍历了所有1,000,000个文档和60,000,000个索

  • 我有一个代码片段,看起来像这样 配置类

  • 我试图改变JTable的选择行为,使其能够在不使用CTRL修饰符的情况下向选择添加和移除行。方法: 似乎正是我所要寻找的,尤其是这种情况: 是我想做的。问题是我做不到。也许我遗漏了一些关于内部JTable工作的信息,但下面是我的代码: 这似乎是在不务正业。有谁能告诉我问题出在哪里吗? 多谢了。

  • 这其实不是一个问题,然而,我想在这里分享一些我的工作代码,供您需要时参考。 正如我们所知,从API22中不推荐使用,并且从API23开始被删除。目前,我们无法在Android Developer上访问HttpEntity引用(404)。因此,下面是使用Volley而不使用HttpEntity的POST多部分请求的工作示例代码。通过测试,它正在工作。当然,该代码可能只是一个发布两个已有的可绘制文件的

  • 默认的,当连接道不同的命名空间后一个单一的链接将会被使用。 const socket = io(); const adminSocket = io('/admin'); // a single connection will be established 注意:重用相同的命名空间将会创建两个连接: const socket = io(); const socket2 = io(); // wil

  • 问题内容: 我正在使用Hibernate Envers来审核我的实体。但是我有一个问题。我想审核一个具有ManyToMany关系的实体。我发现存在一个@AuditJoinTable,但是我不知道它是如何工作的。有人可以举一个例子吗? 问题答案: 审核多对多关系应该可以在没有任何其他配置的情况下进行,前提是必须对关系的双方进行审核。 关于,注释用于指定联接表的自定义表名称。看到: http://do