Python

[Python] 동기화를 위한 threading.Event()

화이팅입미다 2021. 3. 31. 19:16

동기(synchronous : 동시에 일어나는)

- 요청을 보낸 후 응답을 받아야 다음 동작이 이루어지는 방식, 다음 코드가 blocking된다.

 

비동기(asynchronous : 동시에 일어나지 않는)

- 요청을 보낸 후 응답과 상관없이 다음 동작이 이루어지는 방식, 다음 코드가 blocking 되지 않는다.(=nonblocking)

 

 

출처 : https://jieun0113.tistory.com/73

python 코드에서 동기식 프로그래밍을 위해(?) 간단한 threading.Event()객체를 사용하였다.

 

 

Event 객체

thread 간의 간단한 통신을 위해 사용되는 객체

 

is_set() : 내부 플래그가 True면 그때만 True 반환

set() : 내부 플래그를 True로 설정

clear() : 내부 플래그를 False로 설정

wait(timeout=None) : 내부 플래그가 True가 될때까지 blocking함. 

 

 

example code)

class Test:
    def __init__(self):
    	print('Test')
    	self.evt = threding.Event()
        self.start()
        self.stop()
        
    def stop(self):
    	print('stop')
        time.sleep(1)
    	self.evt.set()
    
    def start(self):
    	print('start')
    	self.evt.wait()
        

Test()

 

결과

Test
start
(1초뒤)
stop

 

간단한 동기 프로그래밍에 유용!!