각각의 모듈은 아래와 같습니다.
- Thread
- Threading
먼저 Thread는 C와 같이 함수를 이용해 Thread를 run 시키는 방식으로 MultiThreading을 구현합니다.
Threading은 흔히 자바에서 보던 방식처럼 Thread관련 클래스를 상속받아 run을 override 하여 사용합니다.
이 포스팅에선 먼저 Thread만 다루도록 하겠습니다.
1. Thread
기본적으로 Thread에서 thread를 run시키는 함수는 아래와 같습니다.
thread.start_new_thread( function, (argument))
아래 소스코드를 확인 해 보겠습니다.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import thread | |
import time | |
def print_num(threadName, delay): | |
count = 0 | |
while count < 5: | |
time.sleep(delay) | |
count += 1 | |
print "%s: %d" % (threadName, count) | |
try: | |
thread.start_new_thread( print_num, ("Thread_1", 1)) | |
thread.start_new_thread( print_num, ("Thread_2", 2)) | |
except: | |
print "Error: unable to start thread" | |
while 1: | |
pass |
delay 시간만큼 텀을 두고 숫자를 1~5까지 출력하는 함수 입니다.
이 함수를 각 각 1초와 2초로 설정하여 두개의 쓰레드를 작동 시키는 프로그램입니다.
출력값은 synchronizing이 되어있지 않아 값이 겹쳐 나올 수 있게 됩니다.
마지막의 while은 Main Thread를 종료시키게 되면 생성된 2개의 쓰레드도 죽게 되므로
이를 막기위해 Main Thread에 무한루프를 걸어줍니다.
아래는 출력값 입니다.
Thread_1: 1
Thread_2: 1Thread_1: 2
Thread_1: 3
Thread_2: 2
Thread_1: 4
Thread_1: 5
Thread_2: 3
Thread_2: 4
Thread_2: 5