我有一个问题,希望有人能帮我弄清楚。我正在尝试在 iPython 笔记本中构建两个不同的并行视图。第一个视图包含 ID 为 0 的处理器,第二个视图包含所有其余的处理器。我为每个视图关联了一个前缀,这样我就可以轻松地在不同的处理器上运行不同的东西。
我启动了一个后台线程,该线程使用第二个视图中的处理器进行长时间计算。当它在后台运行时,我尝试使用第一个视图运行命令,但它不起作用。我收到此错误:ValueError:''不在列表中。
所以我想知道是否有办法做我想做的事情,或者这是否是不受支持的行为。简而言之,我想使用不同的处理器创建两个不同的视图。视图之间不会共享处理器。然后我希望能够运行使用一个视图的后台任务,同时将另一个视图用于不相关的任务。
这是一个导致错误的小示例脚本。我不确定如何直接发布笔记本,所以我只是复制并粘贴了从中生成的 python 脚本。
# <codecell>
from IPython import parallel
cli = parallel.Client()
# <codecell>
view1 = cli[0]
view1.block = True
view1.activate("_one")
# <codecell>
view2 = cli[1:]
view2.block = True
view2.activate("_two")
# <codecell>
%px_two import time
def backFunc():
for i in range(10):
%px_two time.sleep(5)
%px_two print "In bg thread"
# <codecell>
from IPython.lib import backgroundjobs as bg
bgJob = bg.BackgroundJobManager()
bgJob.new('backFunc()')
# <codecell>
%px_one import time
def foreFunc():
for i in range(10):
%px_one time.sleep(1)
%px_one print "In fg thread"
# <codecell>
foreFunc()
一旦 foreFunc() 运行,它就会给出错误:
ValueError: '<IDS|MSG>' is not in list
有什么想法吗?我会很感激任何人的任何想法。