Применение коллбэков к заданиям и задачам планировщика заданий MATLAB

MATLAB® Планировщик заданий имеет возможность инициировать коллбэки в сеансе клиента каждый раз, когда задания или задачи в кластере планировщика заданий MATLAB изменяются на определенные состояния.

Объекты клиента, представляющие задания и задачи в кластере планировщика заданий MATLAB, включают следующие свойства:

Свойство коллбэкаОбъектПоле «Менеджер профилей кластеров»Описание
QueuedFcnТолько заданиеJobQueuedFcn

Задает функцию, которая должна выполняться в клиенте при отправке задания в очередь планировщика заданий MATLAB

RunningFcnЗадание или задача

JobRunningFcn

TaskRunningFcn

Задает функцию, которая должна выполняться в клиенте, когда задание или задача начинают свое выполнение

FinishedFcnЗадание или задача

JobFinishedFcn

TaskFinishedFcn

Задает функцию, которая должна выполняться в клиенте, когда задание или задача завершают свое выполнение

Можно задать для каждого из этих свойств любое допустимое значение коллбэка MATLAB в Диспетчере профилей кластеров, см. таблицу и Добавить и изменить профили кластеров. Это коллбэк следует тому же поведению для Дескриптивной графики®, передача в функцию обратного вызова объекта (задания или задачи), который делает вызов и пустой аргумент данных о событиях.

Эти свойства применяются только к клиентским Сеансам работы с MATLAB, в которых они заданы. Более поздние сеансы, которые получают доступ к тому же заданию или объектам задачи, не наследуют параметры из предыдущих сеансов. Можно применить свойства к существующим заданиям и задачам в командной строке, но настройки профиля кластера применяются только во время первого создания этих объектов.

Примечание

Свойства коллбэка доступны только при использовании кластера планировщика заданий MATLAB.

Пример 1. Создание коллбэков в командной строке

В этом примере показано, как создать коллбэки задания и задачи в командной строке сеанса клиента.

Создайте и сохраните функцию обратного вызова clientTaskCompleted.m на пути клиента MATLAB со следующим содержимым:

function clientTaskCompleted(task,eventdata)
   disp(['Finished task: ' num2str(task.ID)])

Создайте задание и установите его QueuedFcn, RunningFcn, и FinishedFcn свойства, с помощью указателя на функцию в анонимную функцию, которая отправляет информацию на отображение.

c = parcluster('MyMJS');
j = createJob(c,'Name','Job_52a');
j.QueuedFcn = @(job,eventdata) disp([job.Name ' now ' job.State]);
j.RunningFcn = @(job,eventdata) disp([job.Name ' now ' job.State]);
j.FinishedFcn = @(job,eventdata) disp([job.Name ' now ' job.State]);

Создайте задачу, FinishedFcn которой является указателем на функцию для отдельной функции.

createTask(j,@rand,1,{2,4}, ...
    'FinishedFcn',@clientTaskCompleted);

Запустите задание и отметьте выходные сообщения из коллбэков задания и задачи.

submit(j)
Job_52a now queued
Job_52a now running
Finished task: 1
Job_52a now finished

Чтобы использовать те же коллбэки для любых заданий и задач на данном кластере, необходимо задать эти свойства в профиле кластера. Дополнительные сведения об редактировании профилей в диспетчере профилей см. в разделах Обнаружение кластеров и Использование профилей кластеров. Эти параметры свойств применяются ко всем заданиям и заданиям, созданным с помощью кластера, полученного из этого профиля. Последовательность важна, и должна происходить в таком порядке:

  1. Установите значения свойств коллбэка для профиля в диспетчере профилей.

  2. Используйте профиль кластера для создания объекта кластера в MATLAB.

  3. Используйте объект кластера для создания заданий, а затем задач.

Пример 2. Установка коллбэков в профиль кластера

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

Отредактируйте профиль кластера планировщика заданий MATLAB в менеджере профилей, чтобы можно было задать для свойств коллбэка те же значения в предыдущем примере. Профиль сохранения выглядит следующим образом:

Создайте и сохраните функцию обратного вызова clientTaskCompleted.m на пути клиента MATLAB со следующим содержимым. (Если вы создали эту функцию для предыдущего примера, можно использовать эту.)

function clientTaskCompleted(task,eventdata)
   disp(['Finished task: ' num2str(task.ID)])

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

c = parcluster('MyMJS');
j = createJob(c,'Name','Job_52a');
createTask(j,@rand,1,{2,4});

submit(j)
Job_52a now queued
Job_52a now running
Finished task: 1
Job_52a now finished

Совет

  • Следует избегать выполнения кода в функциях обратного вызова, которые могут вызвать конфликты. Например, если у каждой задачи в задании есть коллбэк, который строит график его результатов, нет гарантии того порядка, в котором задачи заканчиваются, поэтому графики могут перезаписать друг друга. Аналогично, FinishFcn коллбэк для задания может быть инициирован, чтобы начать перед FinishFcn коллбэки для всех его задач завершены.

  • Представления, сделанные с batch использовать соответствующие коллбэки заданий и задач. Параллельные пулы могут инициировать коллбэки заданий, заданные их профилем кластера.