파이썬 멀티프로세싱 하나의 프로세스가 완료시, 실행중인 다른 프로세스들 종료하면서 결과값 return하는 코드 질문이요..

조회수 1532회

제목 그대로 multiprocessing을 이용해서 다수의 프로세스가 하나의 함수를 처리하는데, 프로세스들 중에 하나라도 그 함수를 완료했을 때, 그 프로세스의 결과값을 return하면서 다른 프로세스들은 종료시키는 코드가 필요합니다...

아래 코드는 이러한 코드를 쉽게 test해볼만하도록 작성했는데요,,

a라는 딕셔너리를 들고 멀티프로세싱을 이용해서 find함수로 가서 while문을 루프하게되는데 random으로 나오는 숫자가 0.9이상이면 그 때의 시간과 count를 return하며 종료되는 형식입니다.

현재 코드에서 문제점은, 4개의 프로세스가 모두 다 find함수를 끝맞춰야 result가 나온다는 것이구, main함수의 result에 4개의 프로세스값들이 모두 저장되는 형식입니다 ㅠ.ㅠ

꼭 pool로 해야하는건 아니고, Process로 처리해도 상관없구요.

아무튼 가장 필요한건 하나라도 일을 끝마쳤을시 다른 프로세스들을 중단시키면서 딕셔러니를 return하는것입니다!

from multiprocessing import Pool, Process
import time, random
from time import sleep

def find(a):

    n = 0

    while True:
        k = random.random()
        if k > 0.9:
            break
        n = n+1
        sleep(0.1)

    a['time'] = time.time()    
    a['number'] = n
    return a


if __name__ == "__main__":
    a={'time': 0 , 'number':0}

    p = Pool(4)
    result = p.map(find, [a,a,a,a])
  • (•́ ✖ •̀)
    알 수 없는 사용자

답변을 하려면 로그인이 필요합니다.

프로그래머스 커뮤니티는 개발자들을 위한 Q&A 서비스입니다. 로그인해야 답변을 작성하실 수 있습니다.

(ಠ_ಠ)
(ಠ‿ಠ)