Python에서 Thread/Process를 강제로 종료시키는 방법을 다루고 있습니다. 일반적으로 스레드나 프로세스를 갑자기 종료하는 것은 좋은 방법이 아닙니다. 왜냐하면 스레드/프로세스가 자원을 사용하던 중에 갑자기 종료되면 자원 해제 처리가 제대로 이루어질 수 없기 때문입니다. 스레드/프로세스를 강제 종료해도 자원 해제나 기타 다른 문제가 생길 가능성이 없다면 사용해볼 여지가 있습니다. 본 포스트는 참고한 글을 기반으로 작성되었지만 대부분의 코드와 글이 원문과 차이가 있습니다. 원문에 있던 예외와 trace 관련 방법은 제외했습니다. 중지 플래그 - 전역변수 중지 플래그 - 이벤트 객체 Using traces to kill threads : 스레드 대신 프로세스 사용 데몬(daemon) 참고 2024..
파이썬에서 스레드를 사용하는 방법을 다루고 있습니다. 1. 쓰레드 (Thread) 2. 스레드 생성 및 실행 3. join 함수 4. 데몬 쓰레드 5. Concurrent.futures 모듈 6. 전역 변수 공유 7. GIL(Global Interpreter Lock) 8. 프로세스 생성하여 실행하기 9. Thread vs Process 2022. 8. 6 최초작성 1. 쓰레드 (Thread) 파이썬 코드를 실행하면 보통 위에서 아래로 순차적으로 실행됩니다. 때로는 함수나 조건문, 반복문등에 의해서 실행 순서가 바뀔 수도 있습니다. 하나의 작업이 오래 걸리는 작업이라면 이 작업을 백그라운드로 실행해두고 결과가 리턴되기 전까지 다른 작업을 하고 싶을 수 있습니다. 이렇게 하려면 코드를 병렬로 실행해야 하며..
스레드가 종료되거나 죽었다면 다시 스레드를 실행시켜주는 파이썬 예제 코드입니다. 2023. 1. 28 최초작성 참고 https://blog.naver.com/ytlee64/222832101970 import threading def func(): for i in range(5): print(f'##### thread print {i}') print('##### thread exit #####') t = threading.Thread(target=func) t.start() # 스레드 재시작을 2번 반복합니다. try_num = 2 while True: if try_num == 0: break # 스레드가 살아있는지 체크 if t!=None and t.is_alive(): #print('thread ali..
Python에서 자식 Process 죽었는지 확인하는 예제 코드입니다. 2022.12.31 최초작성 from time import sleep from multiprocessing import Process import subprocess import os # 자식 프로세스가 부모 프로세스보다 먼저 종료되도록 함 def task(): for i in range(3): print('child process print', i) sleep(1) print('child process exit') if __name__ == '__main__': child = Process(target=task) child.start() parent_pid = os.getpid() print('parent process pid = ..
Python에서 자식 Process ID 확인하는 예제 코드입니다. 2022.12.31 최초작성 from time import sleep from multiprocessing import Process import subprocess import os def task(): for i in range(5): sleep(1) if __name__ == '__main__': child = Process(target=task) child.start() # 부모 프로세스 ID parent_pid = os.getpid() print('parent process pid = ', parent_pid) # 자식 프로세스 ID child_pid = child.pid print('child process pid = ', c..
하나의 스레드에서 큐에 데이터를 넣고 다른 쓰레드에서 큐에서 데이터를 꺼내는 간단한 예제 코드입니다. 아래 링크를 참고했습니다. https://docs.python.org/3/library/queue.html 2022. 09. 03 최초작성 2023. 01. 21 큐 모듈 변경. import threading from multiprocessing import Queue def producer(): count = 0 while True: lock.acquire() # 전역 변수 접근을 금지합니다. if not q.full(): # 큐가 꽉차지 않았다면 count = count +1 q.put_nowait(count) # 큐에 데이터를 넣습니다. print(f'push item {count}') lock.r..
파이썬에서 현재 실행중인 스레드의 이름을 출력해주는 예제 코드입니다. 2022. 8. 6. 최초작성 import threading import time def count(num): while num > 0: num = num - 1 print(num) print('thread exit') t = threading.Thread(target=count, args=(10, )) t.start() # 실행중인 스레드의 이름을 출력합니다. for thread in threading.enumerate(): print('***', thread.name) time.sleep(3) t.join() # join으로 스레드가 종료되길 기다립니다. print('main exit') 실행결과입니다. MainThread와 Thr..