是否总是需要终止进程?

时间:2015-07-10 14:54:28

标签: python multithreading multiprocessing

我正在使用Python进程来运行我的一个函数:

Process1 = Process(target = someFunction)
Process1.start()

现在该函数没有循环或任何东西,它只是做它的事情,然后结束,进程死了吗?或者我总是需要放弃:

Process1.terminate()

此后?

2 个答案:

答案 0 :(得分:2)

子进程将自行退出 - 在这方面Process1.terminate()是不必要的。如果在子进程和父进程之间使用任何共享资源,则尤其如此。来自Python documentation

  

避免终止流程

     

使用Process.terminate方法停止进程可能会导致进程当前使用的任何共享资源(如锁,信号量,管道和队列)被破坏或无法用于其他进程。

     

因此,最好只考虑在从不使用任何共享资源的进程上使用Process.terminate。

但是,如果您希望父进程等待以完成子进程(可能子进程正在修改父进程之后将访问的内容),那么您将要使用{ {1}}阻止父进程继续,直到子进程完成。当使用子进程来避免僵尸进程或孤儿时,这通常是一种很好的做法。

答案 1 :(得分:1)

不,as per the documentation它只会向相关流程发送SIGTERMTerminateProcess()。如果它已经退出那么就没有什么可以终止的。

但是,在子流程中使用退出代码始终是一个很好的过程:

import sys
sys.exit(1)

然后在您知道流程已终止后再检查exit code

if Process1.exitcode():
   errorHandle()