2017-12-28 55 views
0

하나의 대기열에서 항목을 읽고 수정 한 다음 두 번째 대기열로 밀어 넣는 프로그램에서 작업하고 있습니다. 이는 계산상의 고비용 수정 기능으로 인해 다중 CPU로 수행되어야합니다. 인쇄 루프 인쇄 (qOut.get())에서 프로그램이 멈 춥니 다.파이썬 다중 처리 대기열이 갇혔다

from multiprocessing import Pool, Queue 

def update(qIn,qOut): 
    temp=qIn.get() 
    #this is going to be computationaly expensive function 
    qOut.put(temp+1) 



def main(): 

    #input queue 
    qIn=Queue() 

    #output queue 
    qOut=Queue() 

    #set input queue 
    for i in range(10): 
     qIn.put(i) 

    #set number of CPU cores 
    p=Pool(6) 

    #update each item in qIn and push it to qOut 
    for i in range(10): 
     p.apply_async(update, args=(qIn,qOut)) 

    p.close() 
    p.join() 

    #check qOut 
    for i in range(10): 
     print(qOut.get()) 




if __name__ == '__main__': 
    main() 

답변

1

당신이 Manager 사용하여 작성해야합니다 프로세스 사이에 대기열을 공유 할 수있게하기 위해서 :

manager = multiprocessing.Manager() 
qIn = manager.Queue() 
qOut = manager.Queue() 

관리자를 포함한 다른 프로세스간에 공유 할 수있는 데이터를 생성하는 방법을 제공합니다 다른 컴퓨터에서 실행중인 프로세스간에 네트워크를 통해 공유합니다..