使用python多处理,子进程如何终止另一个子进程?

时间:2015-05-05 10:38:39

标签: python

我有两个由我的主申请流程创建的子流程。

A = Process(target=a, args=(aaa,))

B = Process(target=b,args=())

为了论证,他们被称为A和B;如何处理A终止进程B?

1 个答案:

答案 0 :(得分:2)

虽然我不认真推荐儿童过程能够互相核对。我个人会主要管理子流程。

如果您想沿着您目前所在的路线走下去。你可以做你想做的一种方法是让主进程将子A的进程ID传递给子B(或者你想怎么做)。使用此传递给流程的流程ID,您可以终止流程。

选项1: 如果只有一个进程可以终止另一个进程,则最简单的解决方案是首先启动进程B。然后,为进程A传递进程B的进程ID。使用此功能,您可以终止该过程。

def a(pid):
    os.kill(pid)

B = Process(target=b, args=())

A = Process(target=a,args=(B.pid))

选项2: 为此,您可以使用队列或管道(来自multiprocessing library)。

from multiprocessing import Process, Queue

def f(q):
     # will send the process id of the alternative child process 
     print q.get()

if __name__ == '__main__':
    queue_A = Queue()
    queue_B = Queue()
    A = Process(target=f, args=(queue_A,))
    B = Process(target=f,args=(queue_B,))
    A.start()
    B.start()

    queue_A.put(B.pid)
    queue_B.put(A.pid)
    # do stuff....

选项3(我的首选方法): 获取终止的主要过程。

A = Process(target=a, args=())

B = Process(target=b,args=())

A.terminate()
B.terminate()