2017-09-22 11 views
0

저는 slurm 작업을위한 스케줄러 스크립트를 파이썬으로 작성하려고합니다.부모 프로세스가 종료 될 때 계속 될 파이썬에서 스레드를 시작하는 방법은 무엇입니까?

기본적으로 함수에 포함 된 스크립트가 있습니다. job_array_scheduler()이라고 부르 자. 여기에는 time.sleep() 루프가 포함되어 있습니다. 이는 하루 이상 지속될 것으로 예상됩니다. 나는 파이썬 안에서 별도의 스레드로이 함수를 시작할 수 있기를 바란다. 그래서 나는 세션을 종료 할 수 있으며이 것은 계속 실행될 것이다.

import threading 
scheduler_thread = threading.Thread(target=job_array_scheduler, args=args, daemon=True) 
scheduler_thread.start() 

을하지만 파이썬 세션을 종료 할 때 (다만 exit로 즉) 종료 :

나는과 같이 그 일을 시도했다.

파이썬 세션을 종료하거나 사용자를 로그 오프 할 수 있도록 위의 스레드를 계속 유지하려면 어떻게해야합니까? 나는 위의 주위에 포장 다른 스크립트를 쓰고 생각할 수있는, 그래서 python wrapper_script.py & 같은 일을 쉘에서 백그라운드에서 실행할 수 있지만, 내가해야 할 것 같은 것을 방지하기 위해 선호

유일한 방법 내가하고 싶은 일에 대해 별도의 외부 스크립트를 작성하십시오.

+0

스레드 대신 멀티 프로세싱을 사용하십시오 (파이썬에서는 GIL 덕분에 예상대로 작동하지 않습니다) – GPhilo

답변

0

프로세스를 종료하지 마십시오 (스레드는 프로세스의 일부이며 수명을 초과 할 수 없습니다). 원하는 것은 daemonize (or detach) 프로세스입니다.