[英]How to run multiple functions with different return values in python
我有多个函数来训练不同的分类器,每个函数返回一些相关的输出参数。 每个对象的执行时间都比较长,因此我想利用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
开始。 以及如何从每个函数返回值?
谢谢Gopi
检查多处理模块的文档。 链接
要在使用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
模块的最快,最方便的方法。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.