gpt4 book ai didi

Python,多处理 : what to do if process. join() 永远等待?

转载 作者:太空宇宙 更新时间:2023-11-03 17:34:26 25 4
gpt4 key购买 nike

我在类中定义了一个递归函数。该函数所做的所有工作就是解析文本文件,进行一些计算并将其存储在 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 模块的情况下工作得很好。

  • 如何检查进程状态?
  • 我如何知道代码卡在哪里?

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

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

最佳答案

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

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

关于Python,多处理 : what to do if process. join() 永远等待?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31408519/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com