2017-09-22 55 views
0

我正在嘗試爲python中的slurm作業編寫一個調度程序腳本。如何在父進程退出時繼續在python中啓動線程?

基本上,我有一個包含在函數中的腳本,我們稱之爲job_array_scheduler(),它包含一個time.sleep()循環。預計這將運行一天或更長時間。我想能夠從python內部作爲一個單獨的線程啓動這個功能,這樣我就可以退出會話,並且這個東西將繼續運行。

我試着做它像這樣:

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

但這種退出,當我退出Python會話(即只是exit)。

如何解決此問題,以保持上述線程活着,以便我可以退出python會話甚至將我的用戶註銷?

我能想到的是寫另一個腳本環繞上面,這樣我就可以從外殼後臺運行,它做類似python wrapper_script.py &但我寧願避免,因爲我將不得不只有這樣,爲每個我想要做的工作寫一個單獨的外部腳本。

+0

使用'multiprocessing'而不是線程進程(在Python中,由於GIL,它不像你期望的那樣工作) – GPhilo

回答

0

不要退出進程(線程是進程的一部分,無法進入)。你想要的是daemonize (or detach)的過程。

相關問題