언어/Python

파이썬(Python) - Thread(쓰레드) 설명 및 예제 소스 코드(1) - 기초

[좋은사람] 2018. 5. 6. 16:21


파이썬(Python) Thread - 설명



프로그래밍 언어를 떠나서 개발자에게 있어서 쓰레드를 능숙하게 활용할 수 있는 스킬은 정말 중요한
부분이라고 할 수 있습니다.

프로세스의 흐름 및 기타 연관된 동작 관계에 대해서도 잘 파악하고 있어야 하기 때문입니다.

프로세스는 하나의 흐름(루틴)을 가지고 있습니다.
즉, 직렬적으로 한 개의 일을 순서대로 처리하기 때문입니다.


쓰레드를 사용하면 하나의 프로세스 안에서 여러개의 루틴을 만들어서 병렬적으로 실행할 수 있습니다.

단순 반복하는 작업을 분리해서 처리할 수 있으며, 아래와 같은 장점이 있습니다.


- CPU 사용률 향상
- 효율적인 자원 활용 및 응답성 향상
- 코드 간결 및 유지보수성 향상


그러면 이번 시간부터 파이썬 쓰레드 활용 방법에 대해서 3부에 걸쳐서 포스팅해보겠습니다.

Python 관련 포스팅  :  Python 관련



파이썬(Python) Thread - 구조


보통 Thread는 아래와 아키텍처로 나타낼 수 있으며, 관련 예제는 하단에서 설명합니다.




Thread 구조 - 출처


 




파이썬(Python) Thread - 예제 코드


파이썬 쓰레드를 구현한 2개의 예제 파일입니다.


Threading1.py

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 함수 선언
- 11번 라인 : execute 함수 할당
- 13번 라인 : start 메소드 호출



Threading2.py

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


- 5번 라인 : logger 함수 선언 : 쓰레드 정보 상세 출력
- 17번 라인 : 쓰레드로 실행할 execute 함수 선언 : logger 함수 출력
- 31번 라인 : execute 함수 할당
- 32번 라인 : start 메소드 호출

Python Thread 의 추가적인 상세 설명은 이 곳을 참고해 주세요.



파이썬(Python) Thread - 예제 실행 화면


아래 두 개의 이미지로 실제 실행 화면을 확인하실 수 있습니다.


실제 실행 화면1



실제 실행 화면2




마무리


이번 포스팅에서는 함수형으로 파이썬 쓰레드를 구현하는 방법을 간단하게 설명했습니다.

다음 시간에는 쓰레드 동기화에 대해서 포스팅을 하겠습니다.

소스코드 다운로드 :   python_thread(1).zip