[파이썬] 파이썬 내장 모듈인 queue를 활용한 스레드 간 통신

스레드(thread)는 동시에 실행되는 프로그램의 작은 부분이며, 여러 작업을 동시에 처리하기 위해 사용됩니다. 스레드 간의 통신은 데이터를 주고받는 과정을 말하며, 이를 효과적으로 관리하기 위해 파이썬 내장 모듈인 queue를 사용할 수 있습니다.

queue 모듈 소개

queue 모듈은 스레드 간의 안전한 데이터 전달을 위한 자료 구조를 제공합니다. 이 모듈은 여러 스레드에서 동시에 접근 가능한 큐(queue)를 구현하여 데이터를 안전하게 전달할 수 있게 해줍니다. 파이썬에서는 일반적으로 Queue 클래스를 사용하여 큐를 생성하고, put() 메서드로 데이터를 추가하고 get() 메서드로 데이터를 꺼냅니다.

import queue

# 큐 생성
my_queue = queue.Queue()

# 데이터 추가
my_queue.put("Hello")
my_queue.put("World")

# 데이터 추출
data1 = my_queue.get()
data2 = my_queue.get()

print(data1)  # 출력: Hello
print(data2)  # 출력: World

위 코드에서는 queue 모듈을 import한 후 Queue 클래스를 사용하여 큐를 생성합니다. 데이터를 추가할 때는 put() 메서드를 사용하고, 데이터를 추출할 때는 get() 메서드를 사용합니다.

스레드 간 통신 예제

이제 스레드 간에 queue를 이용한 통신 예제를 살펴보겠습니다. 아래 코드는 스레드 간에 숫자를 주고받는 예제입니다.

import queue
import threading

# 큐 생성
my_queue = queue.Queue()

# producer 스레드 함수
def producer():
    for i in range(5):
        my_queue.put(i)
        print(f"Produced: {i}")

# consumer 스레드 함수
def consumer():
    while True:
        data = my_queue.get()
        print(f"Consumed: {data}")

# producer 스레드 생성
producer_thread = threading.Thread(target=producer)

# consumer 스레드 생성
consumer_thread = threading.Thread(target=consumer)

# 스레드 시작
producer_thread.start()
consumer_thread.start()

위 예제에서는 producer 스레드에서 0부터 4까지의 숫자를 큐에 넣고, consumer 스레드에서 큐에서 숫자를 꺼내어 출력합니다. 이를 위해 queue 모듈의 Queue 클래스를 사용하며, 스레드 관리를 위해 threading 모듈을 사용합니다.

결론

파이썬의 내장 모듈인 queue를 활용하면 스레드 간의 통신을 쉽고 안전하게 처리할 수 있습니다. queue를 사용하여 데이터를 주고받을 때에는 put() 메서드로 데이터를 추가하고, get() 메서드로 데이터를 추출합니다. 이를 통해 다중 스레드 환경에서의 효율적인 통신을 구현할 수 있습니다.