Python,多处理:如果 process.join() 永远等待怎么办?

Python, Multiprocessing: what to do if process.join() waits forever?

我在 class 中定义了一个递归函数。该函数所做的只是解析文本文件,进行一些计算并将其存储在 HDF5 文件中。它没有 return 任何东西。

运行 它在一个核心上非常慢。所以我尝试使用 python 的 multiprocessing 模块。我正在创建 4 个进程并在 for 循环中使用不同的参数调用相同的函数。

def main():

    f = FileIO() # class which does all the parsing and writing

    start_node = '2'
    maxDepth = 6

    procs = []

    start = time.time()    
    print "Entering for loop"
    for i in xrange(4):
        p = Process(target = f.read_and_write, args = (node+str(i), maxDepth))
        p.start()
        procs.append(p)


    print "Exited for loop"
    for process in procs:
       process.join()

    end = time.time()

    print "Done in ", end - start, "seconds"

if __name__ == '__main__':
    main()

读写操作成功并正确完成。唯一的问题是我的程序没有退出。打印 Entering for loop 后,我在控制台中什么也看不到。从 htop 我可以看到四个核心已经停止工作。但是我的程序没有退出。

我不知道如何进行调试,因为我是使用此 multiprocessing 模块的新手。我的代码在逻辑上是正确的,并且在不使用 multiprocessing 模块的情况下也能正常工作。

我正在使用 Python 2.7.10 | Anaconda 2.1.0 (64-bit) | ubuntu 14.04 LTS

欢迎任何有关如何调试此类问题的帮助。

首先,您应该确保进程将完成。如果他们进入等待状态,那么他们将永远不会完成。

其次,即使这些过程最终完成,您也可能会遇到永远的等待,由于问题,比如没有得到答案等。您可以将参数传递给 join 方法,表示超时。这将确保您的主进程不会永远等待。