파이썬

파이썬) Multiprocessing Pool 함수 인자 여러개 일 때

이소금 2021. 9. 13. 01:03
반응형

안녕하세요!!

 

오늘은 Multiprocessing Pool 사용 시에 적용하고자 하는 함수가 여러개의 인자를 가지고 있을 때

어떻게 핸들링 하는가에 대해서 배워보겠습니다. 한국어로 깔끔하게 정리된 자료가 없는 것 같아 정리합니다.

 

여기에서는 기본적인 Multiprocessing의 Pool 함수에 대해서는 다루지 않겠습니다.

구글링 조금만 해봐도 정리가 잘 된 자료들이 아주 많아서요..!

 

일단 검색하시면 함수 인자를 하나만 받는 예시는 쉽게 찾으실 수 있습니다.

이런 예시문이요,

def f(x):
    print("값", x, "에 대한 작업 Pid = ",os.getpid())
    time.sleep(1)
    return x*x

if __name__ == '__main__':
    p = Pool(4)
    startTime = int(time.time())
    print(p.map(f, range(0, 10)))
    endTime = int(time.time())
    print("총 작업 시간", (endTime - startTime))

 

그러나 저는, x 하나만 받는게 아닌, 여러개의 매개변수를 받고자 했고, 그 중에서도 x처럼 iteration을 받는 매개변수도 하나 필요했었습니다.

from functools import partial

def f(a, b, c):
    print("{} {} {}".format(a, b, c))

def main():
    iterable = [1, 2, 3, 4, 5]
    pool = multiprocessing.Pool()
    a = "hi"
    b = "there"
    func = partial(f, a, b)
    pool.map(func, iterable)
    pool.close()
    pool.join()

if __name__ == "__main__":
    main()

 

이렇게 해결하시면 되겠습니다.

 

모두 해피코딩하세요!!!

반응형