IT/python

[python3] 파이썬 프로세스 중복 실행 여부 확인

심량 2023. 5. 24. 17:48
def check_duplicate_execution(exact_python_file_name, pid):
    for p in psutil.process_iter():
        cmd = p.cmdline()
        if cmd and exact_python_file_name in cmd and p.pid != pid:
            return True
    return False

파라미터는 비교할 파이썬 파일 이름인데 여기에서는 이것을 실행한 내 프로세스의 파일 이름을 전달합니다.

 

psutil.process_iter()psutil.Process객체를 하나씩 가져와서 cmdline() 으로 얻어온 명령 줄에 해당 이름이 존재하는지 확인가능합니다.

 

cmdline() 은 리스트로 되어 있습니다. 보통은 파이썬 스크립트 이름은 cmdline()[1] 에 존재합니다. cmdline()[0] 은 python 이구요.

이 프로세스 목록에는 찾을 대상 자신도 들어있기 때문에 자신의 pid 를 구해서 같으면(밖에서 호출시 os.getpid()  를 호출하면 얻을 수 있습니다.) 무시하고 다른 경우에 중복으로 판단합니다.

 

결론은 파일 이름은 같은데 pid 가 다른 프로세스가 존재하는 지 찾는 함수입니다.