exponenta event banner

воссоздать

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

Описание

пример

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]);

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

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