运行 program/function 在后台 Python

Running program/function in background in Python

我正在尝试从另一个 python 程序 运行 一个 program/function(以可能的为准),它将启动并关闭。 例子。 python 脚本 "parent.py" 将调用一些输入,输入数据将传递给 function/program "child",这将需要大约 30 分钟才能完成。 parent.py 应在调用 "child" 后关闭。

有什么办法吗?

现在我可以启动子进程,但只有在子进程完成后父进程才会关闭。我想避免。

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

$ 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等到子进程完成才退出。

将运行任何程序作为后台进程。这是最简单的解决方案,效果非常好!

import thread

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

    thread.start_new_thread(yourFunction, (param))