在Python中运行后台程序/功能

时间:2015-10-15 04:29:08

标签: python multithreading multiprocessing multitasking

我正在尝试从另一个python程序运行一个程序/函数(以可能的为准),它将启动并关闭。 例。 python脚本“parent.py”将通过一些输入调用,输入数据将传递给函数/程序“child”,这将花费大约30分钟来完成。调用“child”后,应关闭parent.py。

有没有办法做到这一点?

现在我可以启动孩子,但父母将在孩子完成后关闭。哪个,我想避免。

2 个答案:

答案 0 :(得分:1)

据我了解,您的目标是在子进程中启动后台进程,但不要让主程序等待它完成。这是一个示例程序:

$ cat script.py
import subprocess
subprocess.Popen("sleep 3; echo 'Done!';", shell=True)

以下是该程序正在运行的一个示例:

$ python script.py
$ 
$ 
$ Done!

如您所见,shell脚本在python退出后继续运行。

subprocess有很多选项,您可以根据需要自定义子进程调用。

在某些情况下,在其父出口之后生活的子进程可能会留下僵尸进程。有关如何避免这种情况的说明,请参阅here

替代方案:使子进程等待

如果你想在python等待子进程完成时发生相反的情况,请看这个程序:

$ cat script.py
import subprocess
p = subprocess.Popen("sleep 3; echo 'Done!';", shell=True)
p.wait()

以下是其输出的示例:

$ python script.py
Done!
$ 
$ 

正如您所看到的,因为我们调用了wait,所以python在退出之前一直等到子进程完成。

答案 1 :(得分:1)

将任何程序作为后台进程运行。这是最简单的解决方案,就像魅力一样!

import thread

def yourFunction(param):
    print "yourFunction was called"

    thread.start_new_thread(yourFunction, (param))