我想采用一个现有的函数(例如,从scikit-learn:特别是"predict"函数),并使用多个核心将其应用于一些数据集。
我的第一个天真的方法:
def parallel_predict(classifier):
@dview.parallel(block=True)
def predict( matrix ):
return classifier.predict(matrix)
return predict
不工作(多个内核不开始旋转)。有办法解决这个问题吗?
或者以某种方式将"不可迭代"的函数传递给@dview.parallel
函数?
基于远程执行文档的一些想法。我习惯了@remote
装饰器,而不是你用的@parallel
装饰器,但希望它们仍然适用于你的情况。(由于某些原因,今天似乎无法加载那个文档)。
是否因为classifier
模块在引擎上不可访问而导致远程执行不工作?如果是这样,这可以通过显式地向您的装饰函数添加import
语句来解决,通过使用with dview.import_sync(): import classifier
(根据本例),或添加@require('classifier'):
装饰器(来自文档的同一部分)。至于最后一个选项,不确定多个装饰器是如何交互的(可能最简单的就是给它一个打击)。
第二个想法是,您可以检查远程异常(这里有关于此的文档)。这比什么都得不到要明确得多。例如:
x = e0.execute('1/0')
print x.metadata['error']
x = predict
print x.metadata['error']