用Python在后台运行程序/函数

用Python在后台运行程序/函数,python,multithreading,multiprocessing,multitasking,Python,Multithreading,Multiprocessing,Multitasking,我正在尝试从另一个python程序运行一个程序/函数(以可能的为准),该程序/函数将启动并关闭。 例子。python脚本“parent.py”将通过一些输入调用,输入数据将传递给函数/程序“child”,这将需要大约30分钟来完成。调用“child”后应关闭parent.py 有办法吗 现在我可以启动子系统,但父系统只有在完成子系统后才会关闭。我想避免 据我所知,您的目标是在子流程中启动后台流程,而不是让主程序等待它完成。下面是一个示例程序: $ cat script.py import sub

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

有办法吗


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

据我所知,您的目标是在子流程中启动后台流程,而不是让主程序等待它完成。下面是一个示例程序:

$ cat script.py
import subprocess
subprocess.Popen("sleep 3; echo 'Done!';", shell=True)
下面是该程序运行的一个示例:

$ python script.py
$ 
$ 
$ Done!
如您所见,shell脚本在python退出后继续运行

子流程
有许多选项,您需要根据需要自定义子流程调用

在某些情况下,在其父进程退出后生存的子进程可能会离开僵尸进程。有关如何避免这种情况的说明,请参阅

另一种选择是:让子进程等待 如果希望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))

您看过了吗?是的,它也有相同的问题,它还将等待子进程完成,然后终止主程序。有一些选项可以使子进程像那样等待,但您不必设置这些选项。请参阅我的答案以获取示例。