하나의 함수를 동시에 여러 개 실행 (multiprocessing) 하는 코드 질문입니다. (jupyter notebook)

조회수 2316회

안녕하세요 파이썬을 jupyter notebook으로 하고있는데,, multiprocessing 모듈을 쓰는데 어려움을 겪고 있어서, 질문드립니다.

여러 블로그들에서 예문코드들을 돌려보아도 주피터노트북이 이상한건지 코드가 이상한건지 print문들이 제대로 안나오는게 많네여

import sys, random

People_number = input("Input number of peoplet: ")
People_number = int(People_number)

def sum():
    sum = 0
    while sum < 100:
        number = random.randint(1,10)
        sum = sum + number
    return sum

print(sum())

일단, 수정중인 코드는 위와 같구여,

sum함수는 1부터 9까지 랜덤으로 정수를 받아서 계속 더하면서 sum이 100이상이 되면 while문을 빠져나와서 sum값을 return하는 구조입니다.

제가 원하는 코드는 People_number를 입력 받아서 예를들어, 4명이라고 치면, sum 함수를 4명이 실행시켜서 가장빨리 함수를 끝마친 사람의 번호와 값을 return하는 함수를 만들고싶습니다....

꼭 anaconda Jupyter notebook에서 실행가능해야합니다. 파이썬 코딩 고수님들 부탁드립니다 ㅠ

  • (•́ ✖ •̀)
    알 수 없는 사용자

1 답변

  • sum 은 builtin 된 함수가 있으므로 변수명으로는 적합하지 않습니다.

    기존의 sum 함수는 최대한 그대로 사용했고 multiprocessing 부분을 추가했고 sort를 추가했습니다.(소팅했으므로 처음것이 가장 빠른 값입니다.)

    from timeit import default_timer as timer
    from multiprocessing import Pool
    import random
    import time
    
    def _sum(to):
        vsum = 0
        start = timer()
        while vsum < to:
            number = random.randint(1,10)
            vsum = vsum + number
            time.sleep(0.1)
        end = timer()
        return (vsum, end - start)
    
    p = Pool(4)
    result = p.map(func=_sum, iterable=(100, 100, 100, 100))
    print(sorted(result, key=lambda item:item[1]))
    
    • 감사합니다. 그런데, 제 Jupyter notebook으로 실행하니까 아무 결과가 안나오고, 계속 In(*)로 나오는거보니 계속 실행중인것같은데, 이것말고도 multiprocessing모듈 사용한 다른 예제들 실행시켜도 계속 이렇습니다 ㅠㅠ. 혹시 왜 이러는건지 이유 아시나요?? 알 수 없는 사용자 2018.8.2 11:03
    • 단순히 안됩니다.는 문제해결에 아무런 도움이 되지 않습니다. 테스트를 수행한 환경을 적어보세요. 운영체제 종류, 버전, python 버전, jupyter 버전등을 적어보세요 정영훈 2018.8.2 15:35

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

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

(ಠ_ಠ)
(ಠ‿ಠ)