일시 : 2018.01.17
내용 : 파이썬 스레드(thread) 검색해보며 공부
//
스레드(Thread)
1개의 프로세스(컴퓨터에서 동작하고 있는 프로그램)는 한가지 일을 하지만, 스레드를 이용하여 2가지 이상의 일을 동시에 수행할 수 있다.
예를 들어 실시간 채팅을 하는 코드를 만들 때, 송신하는 코드와 수신하는 코드를 별개로 작동시킬 수 있다.
threading 모듈 이용. import threading
threading에서 내장 모듈인 Thread를 상속받음.
threading.Thread 클래스를 상속받는 클래스를 만들어서 run() 하여 객체 생성
★★ Thread를 구동하기 위해서는 함수명을 run으로 해야함
MyThread로 생성된 객체를 start() 메소드를 실행할 때 run 메소드가 자동으로 수행.
thread 객체 생성 후 start() 메소드를 통해 thread 객체 실행
target은 스레드로 돌릴 함수, args는 입력 인자.
join() 메소드를 통해 스레드가 끝날 때까지 기다림
run 메소드 구현 시
★ 변수를 지정하지 않고 단순 반복을 하고 싶을 때는 _언더바를 사용한다.
import threading
## threading 모듈을 이용
## threading.Thread를 상속받는 클래스를 만들어서 run하여 객체를 생성한다.
class Messenger(threading.Thread):
def run(self):
for _ in range(10):
## 변수를 지정하지 않고 단순 반복을 하고 싶을 때는 _언더바를 사용한다.
print(threading.currentThread().getName())
send = Messenger(name="Sending out Messages")
receive = Messenger(name="Receiving Messages")
send.start()
receive.start()
>> 출력결과
run 메소드 없이 스레드 구현
from threading import Thread
import time
def my_thread(val):
for i in range(3):
print("I'm Thread")
time.sleep(2)
## 인스턴스 만들기
## 첫번째 argu는 스레드 함수 이름, 두번째 argu는 매개변수를 튜플 형태로 전달한 것.
t1 = Thread(target = my_thread, args=(1,))
## 스레드 시작.
t1.start()
## main
for i in range(3):
print("I'm main Thread")
time.sleep(1)
print("----the end----")
>> 출력결과
위의 결과를 보면 프롬프트 명령창에 스레드가 출력된 것을 볼 수 있다.
스레드가 끝날 때까지 기다리는 명령 join() 함수를 써보자.
from threading import Thread
import time
def my_thread(val):
for i in range(3):
print("I'm Thread")
time.sleep(2)
## 인스턴스 만들기
## 첫번째 argu는 스레드 함수 이름, 두번째 argu는 매개변수를 튜플 형태로 전달한 것.
t1 = Thread(target = my_thread, args=(1,))
## 스레드 시작.
t1.start()
## main
for i in range(3):
print("I'm main Thread")
time.sleep(1)
print("----the end----")
t1.join()
>> join() 함수를 추가하니 스레드가 종료될 때까지 기다린 것을 볼 수 있다.
from threading import Thread
import time
def my_thread(val):
for i in range(3):
print("I'm Thread")
time.sleep(1)
## 인스턴스 만들기
## 첫번째 argu는 스레드 함수 이름, 두번째 argu는 매개변수를 튜플 형태로 전달한 것.
t1 = Thread(target = my_thread, args=(1,))
## 스레드 시작.
t1.start()
t1.join()
## main
for i in range(3):
print("I'm main Thread")
time.sleep(1)
print("----the end----")
>> join()함수를 main함수 전에 써주면 자식 스레드가 다 출력된 후 메인이 출력된 것을 확인할 수 있다.
'2017 멀티캠퍼스 > Python' 카테고리의 다른 글
[Python] #16 if __name__ == "__main__" 의 의미 (3) | 2018.01.17 |
---|---|
[Python] 날씨 API 받아오기 (0) | 2018.01.16 |
[Raspberry Pi/Python] 현재 시간 FND에 출력하기 (0) | 2018.01.16 |
[Python] #14 파이썬 객체 지향 : 생성자와 상속 (0) | 2018.01.14 |
[Python] #13 파이썬 객체 지향 : 클래스 (0) | 2018.01.14 |