파이썬(Python) Thread - 설명
프로그래밍 언어를 떠나서 개발자에게 있어서 쓰레드를 능숙하게 활용할 수 있는 스킬은 정말 중요한
부분이라고 할 수 있습니다.
프로세스의 흐름 및 기타 연관된 동작 관계에 대해서도 잘 파악하고 있어야 하기 때문입니다.
프로세스는 하나의 흐름(루틴)을 가지고 있습니다.
즉, 직렬적으로 한 개의 일을 순서대로 처리하기 때문입니다.
쓰레드를 사용하면 하나의 프로세스 안에서 여러개의 루틴을 만들어서 병렬적으로 실행할 수 있습니다.
단순 반복하는 작업을 분리해서 처리할 수 있으며, 아래와 같은 장점이 있습니다.
- CPU 사용률 향상
- 효율적인 자원 활용 및 응답성 향상
- 코드 간결 및 유지보수성 향상
그러면 이번 시간부터 파이썬 쓰레드 활용 방법에 대해서 3부에 걸쳐서 포스팅해보겠습니다.
Python 관련 포스팅 : Python 관련
Python 관련 포스팅 : Python 관련
파이썬(Python) Thread - 구조
보통 Thread는 아래와 아키텍처로 나타낼 수 있으며, 관련 예제는 하단에서 설명합니다.
Thread 구조 - 출처
파이썬(Python) Thread - 예제 코드
파이썬 쓰레드를 구현한 2개의 예제 파일입니다.
Threading1.py
12345678910111213 #Python Thread 예제1import threading def execute(number): """ 쓰레드에서 실행 할 함수 """ print(threading.currentThread().getName(), number) if __name__ == '__main__': for i in range(1,8): # 1 ~ 7 실행 my_thread = threading.Thread(target=execute, args=(i,)) my_thread.start() cs
- 4번 라인 : 쓰레드로 실행할 execute 함수 선언- 11번 라인 : execute 함수 할당- 13번 라인 : start 메소드 호출
1 2 3 4 5 6 7 8 9 10 11 12 13 | #Python Thread 예제1 import threading def execute(number): """ 쓰레드에서 실행 할 함수 """ print(threading.currentThread().getName(), number) if __name__ == '__main__': for i in range(1,8): # 1 ~ 7 실행 my_thread = threading.Thread(target=execute, args=(i,)) my_thread.start() | cs |
- 4번 라인 : 쓰레드로 실행할 execute 함수 선언
Threading2.py
Threading2.py
1234567891011121314151617181920212223242526272829303132 #Python Thread 예제2import loggingimport threading def get_logger(): logger = logging.getLogger("Thread Example") logger.setLevel(logging.DEBUG) #fh = logging.FileHandler("threading.log") #로그 파일 출력 fh = logging.StreamHandler() fmt = '%(asctime)s - %(threadName)s - %(levelname)s - %(message)s' formatter = logging.Formatter(fmt) fh.setFormatter(formatter) logger.addHandler(fh) return logger def execute(number, logger): """ 쓰레드에서 실행 할 함수(로깅 사용) """ logger.debug('execute function executing') result = number * 2 logger.debug('execute function ended with: {}'.format( result)) if __name__ == '__main__': #로거 생성 logger = get_logger() for i, name in enumerate(['Kim', 'Lee', 'Park', 'Cho', 'Hong']): my_thread = threading.Thread( target=execute, name=name, args=(i,logger)) my_thread.start() cs
- 5번 라인 : logger 함수 선언 : 쓰레드 정보 상세 출력
- 17번 라인 : 쓰레드로 실행할 execute 함수 선언 : logger 함수 출력- 31번 라인 : execute 함수 할당- 32번 라인 : start 메소드 호출
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 | #Python Thread 예제2 import logging import threading def get_logger(): logger = logging.getLogger("Thread Example") logger.setLevel(logging.DEBUG) #fh = logging.FileHandler("threading.log") #로그 파일 출력 fh = logging.StreamHandler() fmt = '%(asctime)s - %(threadName)s - %(levelname)s - %(message)s' formatter = logging.Formatter(fmt) fh.setFormatter(formatter) logger.addHandler(fh) return logger def execute(number, logger): """ 쓰레드에서 실행 할 함수(로깅 사용) """ logger.debug('execute function executing') result = number * 2 logger.debug('execute function ended with: {}'.format( result)) if __name__ == '__main__': #로거 생성 logger = get_logger() for i, name in enumerate(['Kim', 'Lee', 'Park', 'Cho', 'Hong']): my_thread = threading.Thread( target=execute, name=name, args=(i,logger)) my_thread.start() | cs |
- 17번 라인 : 쓰레드로 실행할 execute 함수 선언 : logger 함수 출력
Python Thread 의 추가적인 상세 설명은 이 곳을 참고해 주세요.
Python Thread 의 추가적인 상세 설명은 이 곳을 참고해 주세요.
파이썬(Python) Thread - 예제 실행 화면
아래 두 개의 이미지로 실제 실행 화면을 확인하실 수 있습니다.
실제 실행 화면1
실제 실행 화면2
마무리
이번 포스팅에서는 함수형으로 파이썬 쓰레드를 구현하는 방법을 간단하게 설명했습니다.
다음 시간에는 쓰레드 동기화에 대해서 포스팅을 하겠습니다.
소스코드 다운로드 : python_thread(1).zip
'언어 > Python' 카테고리의 다른 글
파이썬(Python) - Thread(쓰레드) 설명 및 예제 소스 코드(3) - 데이터 통신 (4) | 2018.05.12 |
---|---|
파이썬(Python) - Thread(쓰레드) 설명 및 예제 소스 코드(2) - 동기화 (0) | 2018.05.09 |
파이썬(Python) - 제네레이터(Generator) 설명 및 예제 소스 코드 (0) | 2018.05.04 |
파이썬(Python) - 이터레이터(Iterator) 설명 및 예제 소스 코드 (0) | 2018.04.27 |
파이썬 Youtube(유투브) 동영상 다운로드 및 MP3 자동 변환 예제 소스 (32) | 2017.12.22 |