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..
Process, Thread, Main 함수의 로그를 파일로 저장하는 logging Python 예제 코드입니다. 2022. 12. 25 최초작성 import logging import logging.handlers import multiprocessing import threading def listener_configurer(): root = logging.getLogger() h = logging.handlers.RotatingFileHandler('log_test.txt', 'w', 0, 0) f = logging.Formatter('%(asctime)s %(processName)-10s %(name)s %(levelname)-8s %(message)s') h.setFormatter(f) root..
하나의 스레드에서 큐에 데이터를 넣고 다른 쓰레드에서 큐에서 데이터를 꺼내는 간단한 예제 코드입니다. 아래 링크를 참고했습니다. 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..
Android 3.0부터 나타나는 에러로 메인 쓰레드에서 네트워크 처리를 하면 발생합니다. 메인 쓰레드에서 UI작업을 해야 하는데 네트워크 처리로 인한 지연이 문제되어 취한 조치입니다. 해결하기 위해서는 네트워크 관련 코드들을 AsyncTask나 Thread 로 옮겨서 처리하도록 하면 됩니다. . 어플리케이션의 UI가 동작 안하는 문제가 생길 수 있지만 메인 쓰레드에서 네트워크 처리를 해주려면 다음 두 줄을 추가해주면 됩니다. StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder().permitAll().build(); StrictMode.setThreadPolicy(policy);