我有一个matlab处理脚本,位于linux上运行的长处理管道中间。
matlab脚本通过N
将相同的操作应用于({8}个)并行的数D_i (i=1,2,...,N)
个数据集parfor
。
通常,处理整个数据集大约需要2小时(在8个核心上)。
不幸的是,有时看起来像其中一个matlab子进程随机崩溃。这使得工作无法完成(管道无法完成)。
我确信这不依赖于数据,就好像我专门重新处理进程崩溃的D_i
一样,执行时没有问题。此外,到目前为止,我已经处理了数以千计的数据集。
我现在如何解决问题(......手动......):
启动matlab作业后,我会定期检查机器上的进程列表(通过简单的top
);每当我在两个小时的工作后有一个matlab进程存活,那么我肯定知道它已经崩溃了。然后我简单地将其杀死并处理尚未分析的数据集部分。
问题:
我正在寻找关于如何超时所有运行的matlab进程的建议,并在它们活着时杀死它们超过例如2小时CPU。
答案 0 :(得分:0)
您应该可以通过重构代码来使用PARFEVAL而不是PARFOR来实现此目的。 Loren的博客中有一个简单的例子:http://blogs.mathworks.com/loren/2013/12/09/getting-data-from-a-web-api-in-parallel/,它展示了如何在一段时间后停止等待工作。