exponenta event banner

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

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