我在类中定义了一个递归函数。所有功能都是解析文本文件,进行一些计算并将其存储在HDF5文件中。它没有返回任何东西。
在一个核心上运行它非常慢。所以我尝试使用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
欢迎任何有关如何调试此类问题的帮助。
答案 0 :(得分:1)
首先,您应该确保完成这些过程。如果他们进入等待状态,那么他们将永远不会完成。
其次,即使这些流程最终完成,您可能会遇到永远等待,因为问题,例如没有得到答案或类似的答案。您可以将参数传递给join
方法,表示超时。这将确保您的主要流程不会永远等待。