所以我编写了一些基本结构如下的代码:
from numpy import *
from dataloader import loadfile
from IPython.parallel import Client
from clustering import *
data = loadfile(0)
N_CLASSES = 10
rowmax = nanmax(data.values, 0)
rowmin = nanmin(data.values, 0)
# Defines the size of block processed at a time
BLOCK_SIZE = 50000
classmean, classcov, classcovinv, classlogdet, classlogprob = init_stats(data, N_CLASSES, rowmax, rowmin)
client = Client()
ids = client.ids
nodes = len(ids)
view = client.load_balanced_view()
dview = client[:]
def get_ml_class(data, args): do sth
dview.scatter('datablock', data)
dview.execute('res1, res2 = get_ml_class(datablock, args)', block=False)
输出dview.执行部分是
<AsyncResult: execute>
这意味着它是被执行的,然而,当我试图把结果拉过去的时候
dview.pull(['res1','res2'], block=True)
它显示:
NameError: name 'res1' is not defined
有人能告诉我我的代码有什么问题吗??非常感谢!你知道吗
让我们举一个简单的例子:
这与预期一样,并给出了一个结果:
所以,我们至少要把这个做对。但是让我稍微修改一下代码:
现在我们有了
NameError
。为什么?你知道吗因为
execute
行上有一个错误(它引用了不存在的变量b
)。非阻塞execute
没有太多抱怨。在第一种(工作)情况下,状态为:在第二种(非工作)情况下:
除此之外,它非常安静,第二条消息并不一定意味着发生了错误。要查看真正的错误消息,请将
blocking
更改为True
。然后你就会知道出了什么问题。你知道吗如果您想知道非阻塞execute是否工作,您必须捕获由
execute
返回的AsyncResult
对象。它有几个有趣的方法,但您最感兴趣的是ready
和successful
方法:此外,在执行期间引发的可能异常可以通过使用
AsyncResult
对象的get
方法获取。例如,我的坏例子在交互式shell中给出:因此,作为一个总结:试着找出你试图远程运行的函数出了什么问题。现在它似乎引起了一些争议。这个错误可能与
args
有关,后者似乎不适用于远程脚本。也许scatter
不见了?你知道吗相关问题 更多 >
编程相关推荐