[python] 파이썬에서의 동시성과 병렬성

파이썬은 동시성과 병렬성을 다루기 위한 여러 가지 기능을 제공합니다. 이 기능들은 코드의 효율성을 높이고 동시에 여러 작업을 처리할 수 있는 능력을 갖추게 해줍니다. 이번 글에서는 파이썬에서의 동시성과 병렬성에 대해 자세히 알아보겠습니다.

동시성과 병렬성의 차이

먼저, 동시성(Concurrency)병렬성(Parallelism)의 차이를 이해하는 것이 중요합니다. 동시성은 여러 작업을 동시에 처리하는 것처럼 보이도록 하는 개념이며, 이를 위해 단일 프로세서에서 작업을 번갈아가며 처리합니다. 반면에 병렬성은 실제로 여러 작업을 동시에 처리하는 것을 의미합니다. 일반적으로 병렬성은 여러 프로세서 또는 코어를 사용하여 작업을 분할하고 처리합니다.

동시성을 위한 파이썬 라이브러리

파이썬에서 동시성을 다루기 위한 대표적인 방법으로는 스레딩(Threading)비동기(Asynchronous) 프로그래밍이 있습니다. 스레딩은 여러 작업을 동시에 처리하기 위해 여러 스레드를 사용하는 것을 의미하며, 파이썬의 threading 모듈을 통해 구현할 수 있습니다. 비동기 프로그래밍은 단일 스레드에서 여러 작업을 동시에 처리할 수 있도록 하는 프로그래밍 방식으로, 파이썬 3.5 이후부터 기본적으로 제공되는 asyncio 라이브러리를 통해 구현할 수 있습니다.

예를 들어, 다음은 threading 모듈을 사용하여 간단한 동시성 작업을 수행하는 예제 코드입니다.

import threading

def print_numbers():
    for i in range(5):
        print(i)

def print_letters():
    for letter in ['a', 'b', 'c', 'd', 'e']:
        print(letter)

t1 = threading.Thread(target=print_numbers)
t2 = threading.Thread(target=print_letters)

t1.start()
t2.start()

t1.join()
t2.join()

병렬성을 위한 파이썬 라이브러리

병렬성을 다루기 위해서는 멀티프로세싱(Multiprocessing)병렬 처리를 지원하는 라이브러리를 활용할 수 있습니다. 파이썬의 multiprocessing 모듈은 별도의 프로세스를 생성하여 병렬 처리를 지원하며, concurrent.futures 모듈을 사용하여 비동기 작업을 처리할 수도 있습니다.

예를 들어, 다음은 concurrent.futures 모듈을 사용하여 간단한 병렬 처리를 수행하는 예제 코드입니다.

from concurrent.futures import ProcessPoolExecutor

def square(n):
    return n * n

numbers = [1, 2, 3, 4, 5]
with ProcessPoolExecutor() as executor:
    results = executor.map(square, numbers)

print(list(results))

결론

파이썬은 동시성과 병렬성을 다루기 위한 다양한 기능을 제공하며, 이를 통해 효율적으로 여러 작업을 처리할 수 있습니다. 이러한 기능을 활용하여 복잡한 작업을 간편하게 처리할 수 있으며, 다양한 라이브러리와 모듈을 통해 원하는 방식으로 동시성과 병렬성을 구현할 수 있습니다.

참고 문헌: