2017-09-22 56 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)的过程。

相关问题