[python] 파이썬에서 프로세스 간 통신 방법

프로세스 간 통신은 병렬 처리나 분산 시스템에서 중요한 역할을 합니다. 파이썬에서도 다양한 방법으로 프로세스 간 통신을 할 수 있습니다. 이번 포스트에서는 파이썬에서의 프로세스 간 통신 방법에 대해 알아보겠습니다.

목차

  1. 파이프(Pipe)
  2. 큐(Queue)
  3. 공유 메모리(Shared Memory)

파이프

파이프는 두 개의 프로세스 간의 단방향 통신을 위한 방법입니다. 파이썬에서는 multiprocessing 라이브러리를 사용하여 파이프를 생성하고 데이터를 주고받을 수 있습니다. 아래는 파이프를 사용한 간단한 예제 코드입니다.

from multiprocessing import Process, Pipe

def sender(conn):
    conn.send("Hello, receiver!")
    conn.close()

def receiver(conn):
    msg = conn.recv()
    print(msg)
    conn.close()

if __name__ == "__main__":
    parent_conn, child_conn = Pipe()
    p1 = Process(target=sender, args=(child_conn,))
    p2 = Process(target=receiver, args=(parent_conn,))
    p1.start()
    p2.start()
    p1.join()
    p2.join()

큐는 파이썬의 multiprocessing 모듈에서 제공하는 다양한 큐(Queue) 클래스를 사용하여 다수의 프로세스 간 통신을 지원합니다. 큐를 사용하면 락(lock) 및 조건 변수(condition variable) 등을 내장하여 안전하게 데이터를 교환할 수 있습니다.

from multiprocessing import Process, Queue

def worker(q):
    data = q.get()
    print(f"Received data: {data}")

if __name__ == "__main__":
    q = Queue()
    p = Process(target=worker, args=(q,))
    p.start()
    q.put("Hello, worker!")
    p.join()

공유 메모리

파이썬에서는 multiprocessing 모듈을 통해 공유 메모리를 사용하여 프로세스 간 데이터를 공유할 수 있습니다. 여러 프로세스가 동시에 데이터를 읽고 쓸 수 있기 때문에 공유 메모리는 성능 측면에서 유용합니다.

from multiprocessing import Process, Value, Array

def modify_shared_data(val, arr):
    val.value = 5
    for i in range(len(arr)):
        arr[i] = arr[i] * 2

if __name__ == "__main__":
    shared_val = Value('i', 0)  # 정수형 공유 변수
    shared_arr = Array('d', [1.0, 2.0, 3.0, 4.0])  # 배열형 공유 변수
    p = Process(target=modify_shared_data, args=(shared_val, shared_arr))
    p.start()
    p.join()
    print(shared_val.value)
    print(shared_arr[:])

결론

파이썬에서는 파이프, 큐, 공유 메모리 등을 통해 다양한 프로세스 간 통신 방법을 제공합니다. 각 방법마다 장단점이 있으니 상황에 맞게 적절한 방법을 선택하여 프로세스 간 통신을 구현할 수 있습니다.

참고 문헌: 파이썬 공식 문서

이상으로 프로세스 간 통신에 대한 파이썬에서의 구현 방법에 대해 알아보았습니다. 감사합니다.