[python] 파이썬에서 프로세스 간 통신 방법
프로세스 간 통신은 병렬 처리나 분산 시스템에서 중요한 역할을 합니다. 파이썬에서도 다양한 방법으로 프로세스 간 통신을 할 수 있습니다. 이번 포스트에서는 파이썬에서의 프로세스 간 통신 방법에 대해 알아보겠습니다.
목차
파이프
파이프는 두 개의 프로세스 간의 단방향 통신을 위한 방법입니다. 파이썬에서는 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[:])
결론
파이썬에서는 파이프, 큐, 공유 메모리 등을 통해 다양한 프로세스 간 통신 방법을 제공합니다. 각 방법마다 장단점이 있으니 상황에 맞게 적절한 방법을 선택하여 프로세스 간 통신을 구현할 수 있습니다.
참고 문헌: 파이썬 공식 문서
이상으로 프로세스 간 통신에 대한 파이썬에서의 구현 방법에 대해 알아보았습니다. 감사합니다.