我有多个函数来训练不同的分类器,每个函数返回一些相关的输出参数。每个的执行时间稍长,所以我想利用multiprocessing
。
例如:
test_mthd = 'complete'
row_num = 288
prob_scores_ANN = test_ANN(test_dataset,test_labels, test_mthd, row_num,
input_hidden_weights, hidden_output_weights,
input_hidden_bias, hidden_output_bias)
predictions_KNN= eval_KNN(trainingSet,testSet, test_mthd, row_num)
现在,
from multiprocessing import Process
if __name__=='__main__':
p1 = Process(target=building_tree_CART(trainingSet, depth_cond=8, min_cond=1))
p1.start()
p2 = Process(target= train_ANN(training_data,training_labels))
p2.start()
p1.join()
p2.join()
对此的启发来自:LINK
我认为这是一个拼写错误:我将training
更改为target
,然后p1
运行,然后p2
启动。以及我们如何从每个函数返回值?
谢谢, 戈皮
答案 0 :(得分:0)
检查多处理模块的文档。 link
要在使用mp.process
时检索值,您必须使用mp.queue
。我发现这种多处理方式有点过于详细,你可以改为探索mp.Pool
。
但是,对于您的示例:
from multiprocessing import Queue, Process
def building_tree_CART(p1queue)
trainingSet, depth_cond, min_cond = p1queue.get()
#do stuff
p1queue.put(variable)
def train_ANN(p2queue)
training_data,training_labels = p2queue.get()
#...
p2queue.put(result)
if __name__=='__main__':
#create separate instances of queues for processes
p1queue = Queue()
p1queue.put(trainingSet, 8, 1)
p2queue = Queue()
p2queue.put(training_data, training_labels)
#Process targets a function, arguments are passed separately
p1 = Process(target=building_tree_CART, args=p1queue)
p1.start()
p2 = Process(target=train_ANN, args=p2queue)
p2.start()
p1.join()
returned_variable = p1queue.get()
p2.join()
returned_variable2 = p2queue.get()
根据您提供的有限信息,这是最佳猜测。如果您需要多次运行函数,建议您使用mp.Pool.map
或mp.Pool.apply
。出于我自己的目的,我发现mp.Pool.apply_async
是使用multiprocessing
模块的最快捷,最便捷的方式。