簡體   English   中英

使用python multiprocessing子進程如何終止另一個子進程?

[英]With python multiprocessing how can child process terminate another child process?

我的主應用程序進程創建了兩個子進程。

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

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

為了爭論起見,它們被稱為A和B。 進程A如何終止進程B?

雖然我將嚴重建議子進程之間不互相推薦。 就我個人而言,我將擁有管理子流程的主要流程。

如果您想沿着當前路線行駛, 一種您可以做的事情的方法是獲取主進程,以將子進程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:為此,您可以使用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()

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM