본문 바로가기
Python

[Python] 파이썬에서 쓰레드 사용하기

by teamnova 2024. 4. 25.

멀티스레딩은 파이썬에서 동시에 여러 작업을 수행할 수 있는 효과적인 방법 중 하나입니다. 이 글에서는 파이썬의 `threading` 모듈을 사용한 기본적인 쓰레드 사용법과 예제를 소개하겠습니다. 이를 통해 독자들은 파이썬에서 멀티스레딩을 어떻게 활용할 수 있는지 이해하고, 자신의 프로젝트에 적용할 수 있을 것입니다.

#### 1. 쓰레드란 무엇인가?
쓰레드는 가장 기본적인 소프트웨어 실행의 단위입니다. 하나의 프로세스 내에서 동작하는 여러 실행 흐름을 만들 때 사용되며, 이를 통해 멀티태스킹을 구현할 수 있습니다.

 


#### 2. `threading` 모듈 소개
파이썬의 `threading` 모듈은 스레드를 생성하고 관리하는 데 필요한 도구를 제공합니다. 이 모듈을 사용하면 간단하게 스레드를 만들고 실행할 수 있습니다.

 


#### 3. 기본적인 쓰레드 생성 및 실행
스레드를 사용하기 위해 가장 먼저 해야 할 일은 `threading.Thread` 클래스의 인스턴스를 생성하는 것입니다. 다음은 기본적인 쓰레드 사용 예제입니다.

 

예제 코드:

import threading

def function_to_run():
    for _ in range(5):
        print("Thread is running")

# 스레드 객체 생성
new_thread = threading.Thread(target=function_to_run)

# 스레드 실행
new_thread.start()

# 메인 스레드가 쓰레드의 종료를 기다립니다
new_thread.join()

print("Thread has finished execution")

 

이 예제에서 `function_to_run` 함수는 새로 생성된 스레드에서 실행되며, 스레드가 종료될 때까지 메인 스레드는 `join()` 메서드를 통해 대기합니다.

 


#### 4. 스레드 동기화
멀티스레딩 환경에서는 여러 스레드가 동일한 데이터에 접근하려 할 때 문제가 발생할 수 있습니다. 이를 방지하기 위해 `Lock` 클래스를 사용하여 데이터에 대한 접근을 동기화할 수 있습니다.

 

예제 코드:

import threading

# 공유 자원
shared_resource = 0
# Lock 객체 생성
lock = threading.Lock()

def increment():
    global shared_resource
    lock.acquire()  # Lock을 획득
    temp = shared_resource
    temp += 1
    shared_resource = temp
    lock.release()  # Lock을 해제

# 스레드 생성 및 실행
threads = [threading.Thread(target=increment) for _ in range(100)]
for thread in threads:
    thread.start()
for thread in threads:
    thread.join()

print(f"Final value of shared_resource: {shared_resource}")

 

위 코드에서는 100개의 스레드가 `shared_resource`를 동시에 수정하려고 시도합니다. `Lock`을 사용함으로써 한 번에 하나의 스레드만이 자원에 접근할 수 있게 되어 데이터 무결성이 보장됩니다.

 


#### 5. 결론
파이썬의 `threading` 모듈을 사용하면 비교적 간단하게 멀티스레딩을 구현할 수 있습니다. 하지만 파이썬의 GIL(Global Interpreter Lock) 때문에 모든 CPU 코어를 효율적으로 사용하기는 어렵습니다. CPU 집약적 작업에는 `multiprocessing` 모듈을 고려하는 것이 좋습니다.