본문 바로가기
Tech/IT기술 리뷰

파이썬 - 멀티스레드를 따로따로 종료시켜보자 (+ 재시작시켜보자)

by xproJason 2022. 2. 18.
반응형
파이썬에서 멀티스레드는 유용한 기능이다.

 

하나의 스레드에 각각의 하위 스레드와 데몬 스레드가 작동하게 만들고, 불필요하거나 재기동이 필요한 스레드는 종료시켰다가 다시 시작하게 할 수 있다. 이렇게 하면, 목적에 따라 여러 스레드를 조작하는 것이 가능하다. 

 

스레드의 종료는 os 로 종료시키는 것이 아니라, exception 을 발생시켜서 종료처리한다. 단일 스레드라면 os.excel 기능을 활용하여 재시작 처리시키는 방법도 있지만, 다중스레드에서는 exception을 발생시키는 것이 간편하고 유용하다. 

 

아래는 스레드 종료처리를 발생시키는 예제이다.

 

 

 

스레드의 발생은 testdef에서 flag가 S에 해당하는 경우이다.

스레드네임을 thread_ex_test class에 name 지정한다. 그리고 start를 수행하게 되면, thread_ex_test class의 def run이 수행된다. 스레드를 클래스에 생성키고, start를 수행하면, 대상 클래스의 run이 수행된다는 점에 주의한다.

def run의 작동구조는 try finally 순으로 지정해두었다. 별 의미는 없다. try를 수행하고, finally가 수행될 것이다. 

 

 

중요한 스레드의 exception을 발생시키는 구문이다.

먼저, threading._active.items()에는 현재 실행중인 스레드목록이 담겨있다. 정확히는 pid와 name을 조회할 수 있다.

해당 스레드네임이 일치하면, 익셉션을 발생시켜 스레드를 종료처리 해버린다. res를 통해 exception 처리개수를 파악한다.

 

 

 

 

재시작하는 방법은 간단하다

위 예제의 소스에서 재시작을 수행한다면, testdef를 호출하면서 flag는 S로 지정하면 된다.

그러면 실행하고자 하는 로직이 재수행되게 된다. 만약 다시 종료를 한다면 testdef의 flag를 다른 문구로 지정하면 되는 것이다. 

 

 

 

 

 

글쓴이 : xpro.jason@gmail.com

[무단배포는 노노, 링크배포는 Okay]

 

- 글작가 Jason 의 병맛지식 -

 

 

 

 

 

반응형

댓글