2014-11-13 173 views
0

我正在研究一個Python腳本,我需要一些幫助。這個腳本運行得很好,給了我需要的結果,但腳本不會退出,因爲p進程仍在運行。我該如何糾正這一點?如何關閉此循環?

讓我說,在函數run_up中,這需要一個while循環。這是我實際嘗試做的簡化版本,for循環對我所需要的不起作用。

from multiprocessing import Process, Pipe 


def run_up(conn): 
    i = 0 
    while True: 
     conn.send(i) 
     i += 1 
    conn.close() 


def div_check(): 
    while True: 
     v = parent_conn.recv() 
     if v > 95: 
      break 
     elif v % 5 == 0: 
      print '%i is divisible by 5' % v 

if __name__ == '__main__': 
    parent_conn, child_conn = Pipe() 
    p = Process(target=run_up, args=(child_conn,)) 
    p.start() 
    div_check() 
    p.join() 
+0

孩子的過程應該強行完成還是應該繼續? – sergzach

回答

0

您可以使用Event。所以你可以做while not event.is_set()而不是while True。而在另一個過程中,當您需要關閉它時,請執行event.set()

+0

感謝您的幫助,現在一切都運行良好 – Chris

0

您的功能run_up有一個無限循環。這意味着孩子的過程永遠不會終止,所以你將永遠被阻止在join

如果您知道何時終止它,那將解決您的問題。否則,您可能需要執行類似@ user3267581答案的操作,以便在進程之間進行通信。