본문 바로가기
Programming/Python

Python Thread 사용방법

by 느리게 걷는 즐거움 2024. 5. 17.
반응형

파이썬에서 스레드(Thread) 사용하기

파이썬에서는 `threading` 모듈을 사용하여 스레드를 생성하고 관리할 수 있습니다. 스레드를 사용하면 여러 작업을 동시에 실행할 수 있어서 CPU 자원을 효율적으로 활용할 수 있습니다.

스레드 생성하기

threading.Thread` 클래스를 사용하여 스레드를 생성합니다.

import threading

def my_function():
    print("This is running in a thread")

# 스레드 생성
my_thread = threading.Thread(target=my_function)

 

스레드 시작하기

`start()` 메서드를 사용하여 스레드를 시작합니다.

my_thread.start()

 

스레드 종료 대기하기

`join()` 메서드를 사용하여 스레드가 종료될 때까지 대기할 수 있습니다.

my_thread.join()

 

스레드 간 통신하기

스레드 간에 데이터를 주고받을 때는 공유 변수나 큐(queue)를 사용합니다.

import threading
import queue

def producer(q):
    for i in range(5):
        q.put(i)

def consumer(q):
    while True:
        item = q.get()
        if item is None:
            break
        print("Got:", item)

# 큐 생성
q = queue.Queue()

# 생산자 스레드 생성 및 실행
producer_thread = threading.Thread(target=producer, args=(q,))
producer_thread.start()

# 소비자 스레드 생성 및 실행
consumer_thread = threading.Thread(target=consumer, args=(q,))
consumer_thread.start()

# 생산자 스레드 종료 대기
producer_thread.join()

# 큐에 None을 넣어 소비자 스레드 종료
q.put(None)
consumer_thread.join()

 

위의 코드의 동작은 아래와 같이 표현될 수 있습니다.

 +------------------+           +------------------+
 |                  |           |                  |
 |  producer_thread |           | consumer_thread  |
 |                  |           |                  |
 +------------------+           +------------------+
           |                              |
           v                              v
      +---------+                   +-------------+
      |         |                   |             |
 ---> | producer| ----[queue]----> |   consumer  |
      |         |                   |             |
      +---------+                   +-------------+
           |                              |
           v                              v
      +---------+                   +-------------+
      |         |                   |             |
 ---> | producer| ----[queue]----> |   consumer  |
      |         |                   |             |
      +---------+                   +-------------+
           |                              |
           v                              v
      +---------+                   +-------------+
      |         |                   |             |
 ---> | producer| ----[queue]----> |   consumer  |
      |         |                   |             |
      +---------+                   +-------------+
           |                              |
           v                              v
      +---------+                   +-------------+
      |         |                   |             |
 ---> | producer| ----[queue]----> |   consumer  |
      |         |                   |             |
      +---------+                   +-------------+
           |                              |
           v                              v
      +---------+                   +-------------+
      |         |                   |             |
 ---> | producer| ----[queue]----> |   consumer  |
      |         |                   |             |
      +---------+                   +-------------+
                                           |
                                           v
                                    Queue is empty
                                           |
                                           v
                                       Consumer exits
                                           |
                                           v
                                     Producer exits

이 그림은 생산자(producer) 스레드가 큐에 데이터를 넣고, 소비자(consumer) 스레드가 큐에서 데이터를 꺼내는 과정을 보여줍니다. 생산자 스레드가 모든 데이터를 큐에 넣은 후에는 None을 큐에 넣어 소비자 스레드가 종료되도록 합니다.

이렇게하면 파이썬에서 스레드를 사용하여 병렬로 작업을 수행할 수 있습니다. 스레드를 사용할 때는 주의해야 할 점으로 스레드 간 동기화와 공유 자원에 대한 안전성이 있습니다. 이에 대한 이해를 바탕으로 스레드를 사용하는 것이 좋습니다.


반응형