2017-12-02 6 views
2

여러 분류자를 훈련시키는 여러 함수가 있으며 각 함수는 관련 출력 매개 변수를 반환합니다. 각각의 실행 시간은 약간 길기 때문에 multiprocessing을 이용하고 싶습니다. 예를 들어파이썬에서 다른 반환 값을 사용하여 여러 함수를 실행하는 방법

: p1 실행 내가 targettraining을 변경하고 : LINK

내가 그 오타 오류를 생각 : 이제

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() 

영감에서입니다 p2이 시작됩니다. 각 함수에서 값을 반환하는 방법은 무엇입니까?

감사 모듈을 멀티 프로세싱의 Gopi

+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입니다.

+0

나는 오류 : ' 역 추적 (마지막으로 가장 최근에 호출) : p2queue.put에서 파일 "", 라인 (1), (training_data, training_labels) 파일 "C : \ Users \ dana0941 \ AppData \ Local \ Continuum \ Anaconda3 \ lib \ multiprocessing \ queues.py"라인 82, put 그렇지 않으면 self._sem.acquire (블록, 타임 아웃) : TypeError : 길이 만 -1 배열을 파이썬 스칼라' – Gopi

+0

으로 변환 할 수 있습니다. 첫 번째 함수 호출에서도 같은 오류가 발생했습니다. 필자가 제안한대로 함수를 조정하고'p1queue.put (output_variables)'에'output_variables'를 넣었습니다. – Gopi