1

我有一个 matlab 处理脚本,位于在 linux 上运行的长处理管道的中间。

matlabN脚本D_i (i=1,2,...,N)通过parfor. 通常,处理整个数据集大约需要 2 小时(在 8 个内核上)。

不幸的是,有时,matlab 子进程之一看起来会随机崩溃。这使得工作无法完成(并且管道无法完成)。

我确信这不依赖于数据,就像我专门重新处理D_i进程崩溃的数据一样,它的执行没有问题。此外,到目前为止,我已经处理了数千个提到的数据集。


我现在如何处理这个问题(......手动......):

启动 matlab 作业后,我会定期检查机器上的进程列表(通过简单的top);每当我在工作两个小时后有一个 matlab 进程还活着时,我就确定它已经崩溃了。然后我简单地杀死它并处理尚未分析的数据集部分。


问题:

我正在寻找有关如何使所有运行的 matlab 进程超时并在它们存活超过例如 2 小时 CPU 时杀死它们的建议。

4

1 回答 1

0

您应该能够通过重组代码以使用PARFEVAL而不是 PARFOR 来做到这一点。在 Loren 的博客上的这篇文章中有一个简单的例子:http: //blogs.mathworks.com/loren/2013/12/09/getting-data-from-a-web-api-in-parallel/它展示了如何在给定的时间后停止等待工作。

于 2014-09-26T15:22:56.957 回答