2014-11-13 174 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答案的操作,以便在进程之间进行通信。