我的主应用程序进程创建了两个子进程。
A = Process(target=a, args=(aaa,))
B = Process(target=b,args=())
为了争论起见,它们被称为A和B。进程A如何终止进程B?
虽然我将严重建议子进程不能够相互核对。就我个人而言,我将拥有管理子流程的主要流程。
如果您想沿着这条路线走,那么您当前正在使用。一种可以做自己想做的事情的方法是,让主流程将子代的进程ID传递A
给子代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:为此,您可以使用Queues或Pipes(来自multiprocessing库)。
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()
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句