我该怎么关闭这个循环?

时间:2014-11-13 16:58:42

标签: python pipe multiprocessing

我正在处理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()

2 个答案:

答案 0 :(得分:0)

您可以使用Event。因此,您可以while not event.is_set()代替while True。在另一个过程中,当您需要关闭它时,请event.set()

答案 1 :(得分:0)

您的函数run_up具有无限循环。这意味着子进程永远不会终止,因此您将永久阻止join

如果您知道何时终止它,那将解决您的问题。否则,您可能需要在@ user3267581的答案中执行某些操作,以便在进程之间进行通信。