[python] 파이썬에서의 스레딩과 IO 처리

파이썬은 기본적으로 GIL(Global Interpreter Lock)이라는 메커니즘을 통해 한 번에 하나의 스레드만이 파이썬 바이트 코드를 실행할 수 있도록 설계되어 있습니다. 이러한 제한으로 인해 파이썬의 스레딩은 IO 처리의 병렬화에 주로 사용됩니다.

스레딩(Thread)의 개념

스레드는 하나의 프로세스 안에서 실행되는 여러 흐름의 단위로, 각 스레드는 별도의 작업을 수행할 수 있습니다. 파이썬에서 스레딩은 threading 모듈을 통해 지원됩니다.

import threading

def worker():
    print("Worker executing...")

thread = threading.Thread(target=worker)
thread.start()

IO 처리와 스레딩

파이썬의 GIL로 인해 CPU-bound 작업은 스레드로 병렬화되지 않지만, IO-bound 작업은 스레드로 병렬화할 수 있습니다. 네트워크 통신이나 파일 입출력(IO) 등의 작업은 대기 시간이 발생하므로 다중 스레드로 병렬적으로 처리할 수 있습니다.

import threading
import requests

def download_url(url):
    response = requests.get(url)
    # process the response

urls = [...]
threads = []
for url in urls:
    thread = threading.Thread(target=download_url, args=(url,))
    threads.append(thread)
    thread.start()
for thread in threads:
    thread.join()

스레딩과 동시성

파이썬에서는 GIL로 인해 여러 스레드가 CPU를 동시에 사용할 수 없지만, IO-bound 작업을 병렬화하여 IO 처리 속도를 향상시킬 수 있습니다. 이와 같은 방법으로 파이썬에서 스레딩을 사용하여 병렬적인 IO 처리를 구현할 수 있습니다.

참고문헌: