반응형
Python 프로그램을 하다보면 보통 서브 프로세스를 생성하는 경우가 발새한다.
이때 프로그램의 로직을 잘 작성하였다면, 좀비 프로세스가 생성되지 않는다.
하지만 복잡한 프로그램, 특히 다중 실행이 가능한 멀티 프로세스로 구사하다보면, 종종 문제를 만나게 되는 부분이 종료가 되지 않는 좀비 프로세스들이다.
이를 효과적으로 관리할 수 있는 방안이 무엇일까 고민해보면서 사용할 수 있는 timeout과 필자의 생각에 대해서 정리해본다.
timeout
Python에서 process를 생성하는 subprocess 라이브러리에서 wait 함수를 이용하여 아래와 같이 timeout을 지정할 수 있다.
>>> import subprocess
>>> from subprocess import TimeoutExpired
>>>
>>> proc = subprocess.Popen('notepad')
>>> try:
... proc.wait(timeout=5)
... except TimeoutExpired:
... proc.kill()
... print('kill notepad')
...
kill notepad
timeout은 프로세스가 작업중이라고 하더라도 위 시간이 지나면 강제로 종료한다는 의미를 말한다.
즉 하루 이상 실행될 일이 없는 프로세스라면 3600*24 를 입력하여 하루가 넘어가지 않도록 프로세스를 조정할 수 있다.
이를 통해 프로세스를 관리한다면 지정된 시간을 넘어가는 프로세스는 없기 때문에 무조건 종료가 가능하다고 할 수 있다.
다만 문제점이라면 이렇게 강제 종료를 하다면 프로세스가 중요한 작업을 하고 있었다면 중간에 강제로 종료되기 때문에 큰 문제가 발생할 수 있다. 따라서 이러한 결정은 큰 위험을 감수해야 한다.
활용한다면 큰 시간으로 설정하고 이와 관련하여 문제가 발생하였는지를 알람을 통해 개발된 기능에 문제가 있는 것을 확인하는 용도로 개발 단계에서 활용할 수 있을 것이다.
반응형
'Python' 카테고리의 다른 글
Python - List 에서 문자열 포함 유무를 확인 (0) | 2024.03.25 |
---|---|
Python - sys.exit(0) 과 sys.exit(1)의 차이 exit code (0) | 2024.03.25 |
Python - asyncio 코루틴 await 이해하기 (0) | 2024.03.25 |
Django 4.x 주요 기능 정리(4.0, 4.1, 4.2) (0) | 2024.03.25 |
Python - argument after * must be an iterable, not int (0) | 2024.03.25 |