我正在集群上运行分布式作业。我需要执行一个脚本,当上一个任务完成时(而是所有任务都已完成),该脚本会向我发送电子邮件。我已经准备好脚本,但是不确定如何完成任务。是否有类似于labindex的任务ID?
我想在工作中构建此电子邮件功能的原因是,这样我就可以在提交后退出MATLAB并在完成后收集我的数据。这样,我就不会浪费资源经常对其进行ping操作以获取其状态。
回答:
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 请注意,此代码是为“分布式计算工具箱”的原始发行版(后来更名为“并行计算工具箱”)编写的,因此可能有更优雅的方法来完成您要执行的操作。需要注意的是,这可以完成工作-我的理解是,仅当您在集群上运行MATLAB作业管理器(而不是第三方MPI作业管理器之一,例如TORQUE)时,此回调功能才有效。
更多&回答...