recreate

Создать новое задание из существующего задания

Описание

пример

newjob = recreate(oldjob) создает новый объект задания на основе существующего задания, содержащий те же задачи и опции, что и oldjob. Старая работа может быть в любом состоянии; новое состояние задания находится в ожидании. Если oldjob была создана с использованием batch, затем MATLAB® автоматически отправляет новое задание.

пример

newjob = recreate(oldjob,'Tasks',tasksToRecreate) создает объект задания с задачами, которые соответствуют tasksToRecreate. Поскольку коммуникационные задания имеют только одну задачу, эта опция поддерживает только независимые задания.

пример

newjob = recreate(oldjob,'TaskState',states) создает объект задания с задачами, которые соответствуют задачам с State определяется states. Поскольку коммуникационные задания имеют только одну задачу, эта опция поддерживает только независимые задания.

пример

newjob = recreate(oldjob,'TaskID',ids) создает объект задания, содержащий задачи из oldjob которые соответствуют задачам с идентификаторами, заданными ids. Поскольку коммуникационные задания имеют только одну задачу, эта опция поддерживает только независимые задания.

Примеры

свернуть все

Этот подход полезен, когда задачи зависят от файла, который больше не присутствует.

Создайте новое задание с использованием профиля кластера по умолчанию. В этом примере это локальный параллельный пул.

cluster = parcluster;
job = createJob(cluster);

Создайте несколько задач. В частности, создайте задачу, которая зависит от MAT-файла, который не существует.

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

Отправьте задание и дождитесь его завершения. Поскольку MAT-файл во второй задаче не существует, задание прекращает работать. Если вы звоните fetchOutputs на job чтобы получить результаты, вы получите ошибку. Проверьте ошибку с помощью Error свойство соответствующей задачи.

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

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

Создайте MAT-файл, на который ссылается вторая задача, используя save функция. Чтобы создать новое задание с задачами, которые привели к ошибке, используйте 'Tasks' Пара "имя-значение" в recreate, и предоставить 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');

В этом примере показано, как воссоздать независимое задание, которое имеет только задачи с идентификаторами от 21 до 32 из задания oldIndependentJob.

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

В этом примере показано, как найти и воссоздать все неудачные задания, отправленные пользователем 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, заданный как:

  • Массив из parallel.Task принадлежность к oldjob.

  • A 1 x N логический массив, где N - размер oldjob.Tasks, с указанием задач в oldjob будет воссоздан.

  • Указатель на функцию, который принимает oldjob.Tasks как входной параметр. Эта функция должна вернуть 1 x N логический массив, указывающий задачи в oldjob будет воссоздан, где N - размер oldjob.Tasks.

Чтобы перезапустить задачи, содержащие ошибки или предупреждения, используйте этот синтаксис с предопределенными функциями @hasError и hasWarnings.

Пример: 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, заданный как вектор целых чисел.

Пример: newJob = recreate(oldIndependentJob,'TaskID',[1 5]);

Типы данных: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64

Введенный в R2014a