728x90
소개
둘 이상의 쓰레드가 절차적으로 동작하기 위한 쓰레드 이벤트에 대해 알아보겠습니다.
예제 1
set() 과 wait() 에 대한 예제입니다.
import threading
import time
def before_work():
evt.set()
print('* before work, done')
def after_work():
print('** after work, waiting')
evt.wait()
print('** after work, done')
if __name__ == '__main__':
evt = threading.Event()
t1 = threading.Thread(target=after_work)
t2 = threading.Thread(target=before_work)
t1.start()
t2.start()
** after work, waiting
* before work, done
** after work, done
Event 객체를 생성합니다. (default flag=0)
evt = threading.Event()
wait() 함수는 flag 가 1로 설정되기 전까지 대기합니다.
def after_work():
print('** after work, waiting')
evt.wait()
print('** after work, done')
set() 함수는 flag 를 1로 설정합니다.
def before_work():
evt.set()
print('* before work, done')
flag 가 1로 설정되었을 때의 예제입니다.
바로 실행되는 것을 볼 수 있습니다.
import threading
def run():
evt.wait()
print('run')
if __name__ == '__main__':
evt = threading.Event()
evt.set()
t1 = threading.Thread(target=run)
t1.start()
run
예제 2
isSet() 에 대한 예제입니다.
from queue import Queue
import threading
import time
def before_work():
time.sleep(1)
evt.set()
print('* before work, done')
def after_work():
print('** after work, waiting')
evt.wait()
print('** after work, done')
def check_state():
print('*** check state,', evt.isSet())
evt.wait()
print('*** check state,', evt.isSet())
if __name__ == '__main__':
evt = threading.Event()
after_thr = threading.Thread(target=after_work)
before_thr = threading.Thread(target=before_work)
state_thr = threading.Thread(target=check_state)
after_thr.start()
time.sleep(1)
state_thr.start()
before_thr.start()
** after work, waiting
*** check state, False
* before work, done
** after work, done
*** check state, True
isSet() 함수는 현재 플래그 상태를 반환합니다.
print('*** check state,', evt.isSet())
후행 쓰레드인 after_thr 가 먼저 실행되서 wait() 을 호출하여 대기합니다.
1초 뒤, 플래그 상태 체크를 위한 state_thr 가 실행되서 isSet() 을 호출하여 플래그 상태를 출력합니다.
그 뒤로 선행 쓰레드 before_thr 가 실행되면서 set() 를 호출하여 대기하던 쓰레드가 동작을 완료합니다.
'Language > Python' 카테고리의 다른 글
파이썬 로깅( logging) 사용하기 -1 : 출력 / 파일 / 포맷 (0) | 2020.08.14 |
---|---|
파이썬 엘라스틱서치(Elasticsearch) 연동 -3 : 노리(Nori) 형태소 분석기 설치 (0) | 2020.08.13 |
파이썬 쓰레드(Thread) 알아보기 - 3 : 데이터 통신 (0) | 2020.08.12 |
파이썬 쓰레드(Thread) 알아보기 - 2 : 뮤텍스(Lock) (2) | 2020.08.12 |
파이썬 쓰레드(Thread) 알아보기 - 1 (0) | 2020.08.12 |