Python

[Python] 파이썬 멀티프로세싱(Multiprocessing) 사용법과 예제

sécurité de l'information 2023. 10. 9.
[Python] 파이썬 멀티프로세싱(Multiprocessing) 사용법과 예제

안녕하세요! 이번에는 파이썬에서 멀티프로세싱을 사용하는 방법과 그 예제에 대해 알아보겠습니다. 멀티프로세싱은 파이썬에서 여러 개의 프로세스를 동시에 실행하여 병렬 처리를 가능하게 해주는 기능입니다. 이를 통해 CPU 사용률을 최대화하고 작업을 빠르게 처리할 수 있습니다.

1. 멀티프로세싱의 중요성

파이썬은 기본적으로 GIL(Global Interpreter Lock)이라는 메커니즘을 가지고 있어, 한 번에 하나의 스레드만 실행할 수 있습니다. 이로 인해 CPU 바운드 작업을 수행할 때 성능이 저하될 수 있습니다. 멀티프로세싱을 사용하면 여러 개의 프로세스를 생성하여 병렬 처리를 할 수 있으므로, CPU 바운드 작업을 효율적으로 처리할 수 있습니다.

2. 멀티프로세싱 사용법

파이썬에서 멀티프로세싱을 사용하기 위해서는 `multiprocessing` 모듈을 import 해야 합니다. 이 모듈은 프로세스 생성 및 관리를 위한 다양한 기능을 제공합니다.

import multiprocessing

def worker(num):
    print('Worker', num)

if __name__ == '__main__':
    processes = []
    for i in range(5):
        p = multiprocessing.Process(target=worker, args=(i,))
        processes.append(p)
        p.start()

    for process in processes:
        process.join()

위의 예제 코드는 5개의 프로세스를 생성하고, 각각의 프로세스에서 `worker` 함수를 실행하는 예제입니다. `multiprocessing.Process` 클래스를 사용하여 프로세스를 생성하고, `start` 메서드를 호출하여 프로세스를 실행합니다. 마지막으로 `join` 메서드를 호출하여 모든 프로세스가 종료될 때까지 기다립니다.

3. 멀티프로세싱 예제

이제 실제로 멀티프로세싱을 사용하여 어떤 작업을 병렬로 처리할 수 있는지 예제를 살펴보겠습니다.

import multiprocessing

def square(x):
    return x ** 2

if __name__ == '__main__':
    numbers = [1, 2, 3, 4, 5]
    
    pool = multiprocessing.Pool()
    results = pool.map(square, numbers)
    pool.close()
    pool.join()
    
    print(results)

위의 예제 코드는 `square` 함수를 사용하여 주어진 숫자의 제곱을 계산하는 작업을 병렬로 처리하는 예제입니다. `multiprocessing.Pool` 클래스를 사용하여 프로세스 풀을 생성하고, `map` 메서드를 사용하여 작업을 병렬로 실행합니다. 결과는 리스트 형태로 반환되며, `close` 메서드를 호출하여 더 이상 작업을 추가하지 않을 것을 알립니다. 마지막으로 `join` 메서드를 호출하여 모든 작업이 완료될 때까지 기다립니다.

4. 멀티프로세싱과 멀티스레딩 비교

멀티프로세싱과 멀티스레딩은 모두 병렬 처리를 위한 기술이지만, 각각의 장단점이 있습니다. 멀티프로세싱은 여러 개의 프로세스를 생성하여 병렬 처리를 할 수 있으므로, CPU 바운드 작업을 효율적으로 처리할 수 있습니다. 하지만 프로세스 간의 통신이 비용이 크고, 메모리를 공유하지 않으므로 데이터 공유가 어렵습니다.

반면, 멀티스레딩은 여러 개의 스레드를 생성하여 병렬 처리를 할 수 있으므로, I/O 바운드 작업을 효율적으로 처리할 수 있습니다. 스레드 간의 통신이 비용이 적고, 메모리를 공유하기 때문에 데이터 공유가 쉽습니다. 하지만 GIL로 인해 CPU 바운드 작업의 성능이 저하될 수 있습니다.

따라서, 멀티프로세싱과 멀티스레딩은 작업의 특성에 따라 적절하게 선택하여 사용해야 합니다.

5. 결론

이번 포스트에서는 파이썬에서 멀티프로세싱을 사용하는 방법과 그 예제에 대해 알아보았습니다. 멀티프로세싱은 CPU 바운드 작업을 효율적으로 처리할 수 있는 방법으로, 파이썬에서 병렬 처리를 위한 중요한 기능입니다. 멀티프로세싱과 멀티스레딩은 각각의 장단점이 있으므로, 작업의 특성에 따라 적절하게 선택하여 사용해야 합니다.

더 자세한 내용은 공식 문서를 참고하시기 바랍니다.

참고: https://docs.python.org/3/library/multiprocessing.html

댓글

💲 추천 글