2011년 12월 28일 수요일

[Python] 단 하나의 프로세스만 실행 허용하기

필요에 의해 Python 스크립트가 실행 중일 때 동일한 스크립트가 실행되지 못 하도록 하는 방법.

1. 심플하게 생각하자.

그냥 스크립트 실행 시 /tmp/에 특정 이름의 파일을 만들고 이 파일이 이미 존재한다면 실행을 종료시키고, 스크립트가 정상적으로 종료될 때 이 파일을 지운다.

이렇게 만들면 굉장히 단순명료하지만, 정상적으로 실행이 종료되지 않으면 임시 파일이 남게 되므로 영원히 이 스크립트를 다시는 실행할 수 없게 되는 치명적인 단점이 있다.

2. 귀찮아! tendo를 쓰자

easy_install 혹은 pip를 이용해 tendo를 설치하자. 직접 http://pypi.python.org/pypi/tendo 에서 찾아볼 수도 있다. 설명을 보면 굉장히 많은 기능을 제공하지만 여기서는 순순히 singleton process를 위해서만 사용한다.

아래 코드를 스크립트 시작 지점에 삽입한다.
from tendo import singleton
me = singleton.SingleInstance()
이제 이 스크립트는 한 하나의 프로세스만 실행되는 것을 허용한다. 만약 이미 해당 스크립트의 프로세스가 실행중일 때는 아래와 같은 오류를 내뿜으며 종료된다.
WARNING:username:Another instance is already running, quitting.
귀찮을 땐 친절한 분이 만들어 놓으신 외부 도구가 역시 도움이 많이 된다. 아 너무 친절하셔 :-)

추신. 윈도우가 없다보니 윈도우에서 돌아가는지 여부는 확인해 보지 않았다 :P

댓글 없음 :