Main Content

本页采用了机器翻译。点击此处可查看英文原文。

recreate

从现有作业创建新作业

说明

示例

newjob = recreate(oldjob) 根据现有作业创建一个新的作业对象,包含与 oldjob 相同的任务和选项。旧作业可以处于任意状态;新作业状态为待定。如果 oldjob 是使用 batch 创建的,那么 MATLAB® 会自动提交新作业。

示例

newjob = recreate(oldjob,'Tasks',tasksToRecreate) 创建一个与 tasksToRecreate 对应的任务的作业对象。由于通信作业只有一项任务,因此此选项仅支持独立作业。

示例

newjob = recreate(oldjob,'TaskState',states) 创建一个作业对象,其任务与 states 指定的 State 的任务相对应。由于通信作业只有一项任务,因此此选项仅支持独立作业。

示例

newjob = recreate(oldjob,'TaskID',ids) 创建一个作业对象,其中包含来自 oldjob 的任务,这些任务对应于 ids 指定的 ID 的任务。由于通信作业只有一项任务,因此此选项仅支持独立作业。

示例

全部折叠

当任务依赖于不再存在的文件时,这种方法很有用。

使用默认集群配置文件创建一个新作业。在这个例子中,它是本地并行池。

cluster = parcluster;
job = createJob(cluster);

创建多个任务。特别是,创建一个依赖于不存在的 MAT 文件的任务。

createTask(job,@() 'Task1',1);
createTask(job,@() load('myData.mat'),1);

提交作业并等待其完成。由于第二个任务中的 MAT 文件不存在,因此作业失败。如果您在 job 上调用 fetchOutputs 来检索结果,则会收到错误。使用相应任务的 Error 属性检查错误。

submit(job);
wait(job);
job.Tasks(2).Error
ans = 
  ParallelException with properties:

     identifier: 'MATLAB:load:couldNotReadFile'
        message: 'Unable to find file or directory 'myData.mat'.'
          cause: {}
    remotecause: {[1×1 MException]}
          stack: [1×1 struct]
     Correction: []

使用 save 函数创建从第二个任务引用的 MAT 文件。要创建一个包含导致错误的任务的新作业,请使用 recreate 中的 'Tasks' 名称-值对,并提供 hasError 函数。如果您想选择不同的任务集,您可以定义自己的函数。

str = 'Task2';
save myData str
newjob = recreate(job,'Tasks',@hasError);

提交新作业,等待其完成,并获取输出。由于 MAT 文件现在存在,因此作业不会失败。

submit(newjob);
wait(newjob);
out = fetchOutputs(newjob);
out{1}
ans = struct with fields:
    str: 'Task2'

此示例显示如何重新创建整个作业 myJob

newJob = recreate(myJob)               

此示例显示如何重新创建一个独立作业,该作业仅包含来自作业 oldIndependentJob 的待处理任务。

newJob = recreate(oldIndependentJob,'TaskState','pending');

此示例显示如何重新创建一个独立作业,该作业仅包含来自作业 oldIndependentJob 的 ID 为 21 至 32 的任务。

newJob = recreate(oldIndependentJob,'TaskID',[21:32]);

此示例显示如何查找并重新创建用户 Mary 提交的所有失败的作业。假设默认集群是 Mary 提交其作业的集群。

c = parcluster();
failedjobs = findJob(c,'Username','Mary','State','failed');
for m = 1:length(failedjobs)
    newJob(m) = recreate(failedjobs(m));
end

输入参数

全部折叠

要复制的原始作业,指定为 parallel.Job 对象。

示例: newJob = recreate(oldjob); submit(newJob);

数据类型: parallel.Job

oldjob 复制的任务,指定为:

  • 属于 oldjobparallel.Task 数组。

  • 1 x N 逻辑数组,其中 Noldjob.Tasks 的大小,表示要重新创建的 oldjob 中的任务。

  • 接受 oldjob.Tasks 作为输入参量的函数句柄。该函数必须返回一个 1 x N 逻辑数组,指示 oldjob 中要重新创建的任务,其中 Noldjob.Tasks 的大小。

要重新运行包含错误或警告的任务,请将此语法与预定义函数 @hasErrorhasWarnings 一起使用。

示例: newJob = recreate(oldjob,'Tasks',@hasError | @hasWarnings);

数据类型: parallel.Task | logical | function_handle

要复制的任务的状态,指定为字符串或字符串单元数组。states 表示从 oldjob 重新创建所需任务的状态。有效状态为 'pending''running''finished''failed'

示例: newJob = recreate(oldJob,'TaskState','failed');

数据类型: char | string | cell

要从 oldjob 复制的任务的 ID,指定为整数向量。

示例: newJob = recreate(oldIndependentJob,'TaskID',[1 5]);

数据类型: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64

版本历史记录

在 R2014a 中推出