상식닷컴
로그인
가입하기
2026년 상식닷컴 선정 식당 & 카페 리스트
2025년 2026년 신상 호텔 리스트
최근에 오픈한 호텔을 찾는다면 살펴보세요
일주일 식단표 어플
자동 일주일 식단표 어플
안드로이드
아이폰
주식 & 코인 차트의 신
1000만원으로 2000만원 만들기 프로젝트
수정하기 - Python에서 스레드풀을 구현하는 방법은 무엇인가요?
닉네임
비밀번호
제목
내용
[이미지 업로드는 권한이 있는 사람만 가능. 하단 카톡으로 연락]
Python에서 스레드풀(Thread Pool)을 구현하는 방법은 주로 `concurrent.futures` 모듈을 사용하여 간단하게 수행할 수 있습니다. 스레드풀은 여러 스레드를 미리 생성해 두고, 작업이 들어올 때마다 이 스레드들을 재사용하여 작업을 수행하는 방식입니다. 이를 통해 스레드 생성 및 종료에 드는 오버헤드를 줄이고, 효율적으로 멀티스레딩을 활용할 수 있습니다. 1. `concurrent.futures` 모듈 소개 Python 3.2부터 도입된 `concurrent.futures` 모듈은 비동기 작업을 쉽게 처리할 수 있도록 도와주는 고수준 API를 제공합니다. 이 모듈은 `ThreadPoolExecutor`와 `ProcessPoolExecutor` 두 가지 주요 클래스를 제공합니다. 여기서는 스레드풀을 구현하기 위해 `ThreadPoolExecutor`를 사용할 것입니다. 2. 기본 사용법 `ThreadPoolExecutor`를 사용하여 스레드풀을 구현하는 기본적인 방법은 다음과 같습니다. ```python from concurrent.futures import ThreadPoolExecutor import time 작업할 함수 정의 def worker_function(data): print(f"Processing {data}") time.sleep(2) 작업을 시뮬레이션하기 위해 2초 대기 return f"Result of {data}" 스레드풀 생성 및 작업 제출 def main(): with ThreadPoolExecutor(max_workers=5) as executor: 여러 작업을 제출 futures = [executor.submit(worker_function, i) for i in range(10)] 결과 처리 for future in futures: print(future.result()) 각 작업의 결과 출력 if __name__ == "__main__": main() ``` 3. 코드 설명 - worker_function : 이 함수는 스레드에서 실행될 작업을 정의합니다. 여기서는 단순히 입력값을 출력하고 2초 동안 대기한 후 결과를 반환합니다. - ThreadPoolExecutor : `max_workers` <a href='https://sangseek.com/sangseeks/매개/ko'>매개</a>변수를 통해 동시에 실행할 최대 스레드 수를 설정합니다. 이 예제에서는 5개의 스레드를 사용합니다. - executor.submit : 이 메서드는 작업을 스레드풀에 제출하고, `Future` 객체를 반환합니다. `Future` 객체는 작업의 결과를 나중에 가져올 수 있는 방법을 제공합니다. - future.result() : 각 `Future` 객체에서 결과를 가져옵니다. 이 메서드는 작업이 완료될 때까지 블록(block)되며, 결과를 반환합니다. 4. 예외 처리 스레드풀에서 작업을 수행할 때 예외가 발생할 수 있습니다. `Future` 객체의 `result()` 메서드를 호출하면, 작업 중 발생한 예외를 다시 발생시킵니다. 이를 통해 예외를 처리할 수 있습니다. ```python def worker_function(data): if data == 5: raise ValueError("An error occurred!") return f"Result of {data}" def main(): with ThreadPoolExecutor(max_workers=5) as executor: futures = [executor.submit(worker_function, i) for i in range(10)] for future in futures: try: print(future.result()) except Exception as e: print(f"Error: {e}") if __name__ == "__main__": main() ``` 5. 스레드풀의 장점과 단점 장점: - 성능 향상 : I/O 바운드 작업에 대해 성능을 크게 향상시킬 수 있습니다. - 간편한 API : 복잡한 스레드 관리 없이 간단하게 사용할 수 있습니다. - 자원 관리 : 스레드풀은 스레드를 재사용하므로 자원 관리가 용이합니다. 단점: - CPU 바운드 작업에 비효율적 : CPU 바운드 작업에는 `ProcessPoolExecutor`를 사용하는 것이 더 효율적입니다. - GIL의 영향 : Python의 Global Interpreter Lock(GIL)로 인해 멀티스레딩의 성능이 제한될 수 있습니다. 6. 결론 Python에서 스레드풀을 구현하는 것은 `concurrent.futures` 모듈을 통해 매우 간단하게 수행할 수 있습니다. 스레드풀을 사용하면 I/O 바운드 작업을 효율적으로 처리할 수 있으며, 코드의 가독성과 유지보수성을 높일 수 있습니다. 그러나 CPU 바운드 작업에는 프로세스 풀을 고려하는 것이 좋습니다.
이용안내
커뮤니티 이용안내
×
- 게시한 게시글로 발생하는 문제는 게시자에게 책임이 있습니다.
- 게시글이 타인/타업체의 저작권을 침해할 경우 모든 책임은 게시자에게 있습니다. 게시자가 모든 손해를 부담해야 합니다.
- 상식닷컴 운영자는 게시자와 상의하지 않고 게시글을 수정 또는 삭제할 수 있습니다.
- 상식닷컴 운영자는 깨끗한 커뮤니티 공간을 만드는 것이 1순위입니다.
수정하기
취소하기