繁体   English   中英

如何在python中使用不同的返回值运行多个函数

[英]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.mapmp.Pool.apply 出于我自己的目的,我发现mp.Pool.apply_async是使用multiprocessing模块的最快,最方便的方法。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM