[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 처리를 구현할 수 있습니다.
참고문헌:
- Python Documentation: https://docs.python.org/3/library/threading.html
- Real Python: https://realpython.com/python-concurrency/