我正在尝试从另一个python程序运行一个程序/函数(以可能的为准),它将启动并关闭。 例。 python脚本“parent.py”将通过一些输入调用,输入数据将传递给函数/程序“child”,这将花费大约30分钟来完成。调用“child”后,应关闭parent.py。
有没有办法做到这一点?
现在我可以启动孩子,但父母将在孩子完成后关闭。哪个,我想避免。
答案 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))