나는 Python 2.7
스크립트를 작성하고 있습니다.
요약하면이 스크립트는 매일 밤 Linux
에서 실행되며 여러 프로세스가 활성화됩니다.python - 스크립트가 한 번만 활성화되도록하십시오.
이 스크립트가 여러 번 병렬로 실행되지 않도록하고 싶습니다. (기본적으로 Singleton
패턴을 응용 프로그램 수준으로 모방하려고합니다.)
코드 예
def main():
# before doing anything, I'd like to know whether this
# script was activated and alive.
# if so, error out
# do something
if __name__ == "__main__":
main()
제안
순진 솔루션은 뮤텍스 역할을하는 잠금 파일의 어떤 종류를 생성하는 것입니다.
먼저 파일이 존재하는지 확인하십시오. 그렇다면 스크립트의 다른 인스턴스가 이미 생성했으며 오류가 발생합니다. 스크립트가 완료되면이 파일이 제거됩니다.
파일 시스템의 작업이 원자적일 경우이 솔루션이 작동한다고 가정합니다.
구현
import os, sys
lock_file_path = ".lock_script"
def lock_mutex():
if os.path.exists(lock_mutex_path):
print "Error: script was already activated."
sys.exit(-1)
else:
file = open(lock_mutex_path, 'w')
def unlock_mutex():
assert(os.path.exists(lock_mutex_path))
os.remove(lock_mutex_path)
def main():
try:
lock_mutex()
# do something
unlock_mutex()
except:
unlock_mutex()
if __name__ == "__main__":
main()
문제
어떻게 lock_mutex()
보장하고 unlock_mutex()
원자이다 하는가? 당신이 리눅스를 사용하고 있기 때문에
이미 제대로 작동하는 경우 스크립트를 호출하지 않으시겠습니까? – Artur
호기심에서 벗어나서 스크립트가 어떻게 시작되어 이것이 문제가 되는가? – ratatoskr
귀하의 솔루션이 단순한 솔루션이라고 생각하지 않습니다. 실제로 스크립트가 실행 중인지 확인하기 위해 잠금 파일을 만드는 것이 일반적입니다. – aIKid