运行 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))
我正在尝试从另一个 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))