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

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

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

Свойство коллбэкаОбъектКластерный менеджер по профилю полеОписание
QueuedFcnЗадание толькоJobQueuedFcn

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

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

JobRunningFcn

TaskRunningFcn

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

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

JobFinishedFcn

TaskFinishedFcn

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

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

Эти свойства применяются только в клиентском сеансе работы с 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 используйте применимое задание и коллбэки задачи. Параллельные пулы могут инициировать коллбэки задания, заданные их кластерным профилем.