새소식

반응형
Programming Language/Python

[Python] 파이썬 멀티스레딩, 동시성 프로그래밍의 기초

  • -
반응형

1. 파이썬 멀티스레드(Multi threading)란?


멀티프로세스는 각각의 프로세스가 독립된 메모리를 가지고 동작하기 때문에 컴퓨터 내의 자원을 많이 소모하게 된다.
 
하지만 스레드(Thread)의 경우 하나의 프로세스 내에서 여러 개의 작업을 하게 된다. 그리고 내부의 메모리를 공유하면서 각각 움직이므로 프로그램이 가벼워진다.
 
Thread의 대표적 특징은 다음과 같다.
• 메모리 공유
• 독립된 레지스터 사용
• 독립된 스택 사용
 
그럼 이론은 여기까지 하고 아래의 예제들을 살펴보면서 쉽게 이해해 보도록 하자.
 

2. 파이썬 멀티스레드(Multi thread) 선언


예제 코드

import threading
import time

def function_01(lst):
    for x in lst:
        print(x)
        time.sleep(1)
 
def function_02(lst):
    for x in lst:
        print(x)
        time.sleep(2)
        
if __name__ == "__main__":
	thread_01 = threading.Thread(target = function_01, args = (['f1_a','f1_b','f1_c'],))
	thread_02 = threading.Thread(target = function_02, args = (['f2_a','f2_b','f2_c'],))
    
	thread_01.start()
	thread_02.start()
    
	thread_01.join()
	thread_01.join()

Thread 선언은 threading의 Thread로 한다. 그리고 Thread의 시작은 start로 종료는 join으로 하게 된다.
 
target은 thread에서 동작시킬 값(위 코드에선 function_01, function_02 함수)을 결정하고 args는 입력값(해당 함수에 들어갈 파라미터)을 의미한다.

f1_a
f2_a
f2_b
f1_b
f2_c
f1_c

실행결과
 
 

3. 파이썬 멀티스레드(Muilti thread)의 이름, 프로세스명 확인


current_thread.name 함수를 사용해서 현재 thread의 이름과 os.getpid 함수로 현재 process명을 확인할 수 있다.
 
멀티스레드는 동일한 프로세스를 사용하므로 결과는 다른 thread 이름을 가지면서 동일한 process 명을 가진다.
 

예제 코드

import threading
import os

def function_01():
    print(f'function_01 thread name : {threading.current_thread().name}')
    print(f'function_01 process name : {os.getpid()}')

def function_02():
    print(f'function_02 thread name : {threading.current_thread().name}')
    print(f'function_02 process name : {os.getpid()}')


if __name__ == "__main__":
    print("Main Thread name : ", threading.current_thread().name)
    print("Main Process name : ", os.getpid())
        
    thread_01 = threading.Thread(target = function_01, name = "thread_01")
    thread_02 = threading.Thread(target = function_02, name = "thread_02")
    
    thread_01.start()
    thread_02.start()
	
    thread_01.join()
    thread_02.join()
Main Thread name :  MainThread
Main Process name :  1224
function_01 thread name : thread_01
function_01 process name : 1224    
function_02 thread name : thread_02
function_02 process name : 1224

실행결과
 

결과에서 보듯이 process ID는 동일하지만 thread는 각각 다른 이름을 가진다. thread로 동시에 진행되기 때문에 위와 같은 결과가 순서가 위의 실행결과와 다르게 나올 수 있다.

 

 

읽어주셔서 감사합니다.

728x90
반응형
Contents

포스팅 주소를 복사했습니다

이 글이 도움이 되었다면 공감 부탁드립니다.