我正在群集上运行分布式作业。我需要执行一个脚本,在最后一个任务完成时向我发送一封电子邮件(相反,所有任务都已完成)。我准备好了我的脚本,但我不确定如何找到任务完成。是否有类似于labindex的任务ID?
我想在工作中构建此电子邮件功能的原因是我可以在提交后退出MATLAB并在完成后收集我的数据。这样我就不会浪费资源来经常ping它以获得它的状态。
答案 0 :(得分:2)
jobMgr = findResource(parameters for your cluster's job manager...);
job = createJob(jobMgr);
set(job, 'JobData', yourdata);
set(job, 'MaximumNumberOfWorkers', yourmaxworkers);
set(job, 'PathDependencies', yourpathdeps);
set(job, 'FileDependencies', yourfiledeps);
set(job, 'Timeout', yourtimeout);
for m = 1:numjobs
task(m) = createTask(job, @parallelfoo, 1, {m});
% Calls taskFinish when the task completes
set(task(m), 'FinishedFcn', {@taskFinish, m});
end
在其他地方,你将定义一个函数taskFinish,它在每个任务完成时获得一个回调。
function taskFinish(taskObj, eventData, tasknum)
disp(['Task ' num2str(tasknum) ' completed']);
end
请注意,此代码是为Distributed Computing Toolbox的原始版本(随后重命名为Parallel Computing Toolbox)编写的,因此可能有更优雅的方法来完成您尝试执行的操作。这可以完成工作,但有一点需要注意 - 我的理解是,只有在群集上运行MATLAB作业管理器(而不是第三方MPI作业管理器之一,如TORQUE)时,此回调功能才有效。
答案 1 :(得分:0)
我不确定这是否能解决您的大部分问题,但是您可以在这样的工作人员上运行任务ID:
t = getCurrentTask();
tid = t.ID;
但请注意,大多数调度程序以任意顺序执行任务...