Планировщик заданий MATLAB ® может инициировать обратные вызовы в сеансе клиента при каждом изменении заданий или задач в кластере планировщика заданий MATLAB на определенные состояния.
Объекты клиента, представляющие задания и задачи в кластере планировщика заданий MATLAB, включают следующие свойства:
| Свойство обратного вызова | Объект | Поле диспетчера профилей кластера | Описание |
|---|---|---|---|
QueuedFcn | Только задание | JobQueuedFcn | Определяет функцию, выполняемую в клиенте при отправке задания в очередь планировщика заданий MATLAB |
RunningFcn | Задание или задача |
| Указывает функцию, выполняемую в клиенте при начале выполнения задания или задачи |
FinishedFcn | Задание или задача |
| Указывает функцию, выполняемую в клиенте при завершении задания или задачи |
Для каждого из этих свойств можно задать любое допустимое значение обратного вызова MATLAB в диспетчере профилей кластера, см. таблицу и раздел Добавление и изменение профилей кластера. Обратный вызов следует тому же поведению для Handle Graphics ®, передавая в функцию обратного вызова объект (задание или задачу), который делает вызов и пустой аргумент данных события.
Эти свойства применяются только в сеансе MATLAB клиента, в котором они установлены. Более поздние сеансы, имеющие доступ к тому же заданию или объектам задачи, не наследуют параметры предыдущих сеансов. Свойства можно применить к существующим заданиям и задачам в командной строке, но параметры профиля кластера применяются только при первом создании этих объектов.
Примечание
Свойства обратного вызова доступны только при использовании кластера планировщика заданий MATLAB.
В этом примере показано, как создавать обратные вызовы заданий и задач в командной строке сеанса клиента.
Создание и сохранение функции обратного вызова 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
Чтобы использовать один и тот же обратный вызов для любых заданий и задач в данном кластере, необходимо задать эти свойства в профиле кластера. Дополнительные сведения о редактировании профилей в диспетчере профилей см. в разделах Обнаружение кластеров и Использование профилей кластеров. Эти параметры свойств применяются ко всем заданиям и задачам, созданным с помощью кластера, производного от этого профиля. Последовательность важна и должна происходить в следующем порядке:
Задайте значения свойств обратного вызова для профиля в диспетчере профилей.
Профиль кластера используется для создания объекта кластера в MATLAB.
Используйте объект кластера для создания заданий и задач.
В этом примере показано, как задать несколько свойств обратного вызова задания и задачи с помощью диспетчера профилей.
Отредактируйте профиль кластера планировщика заданий 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 использовать применимые обратные вызовы заданий и задач. Параллельные пулы могут инициировать обратные вызовы заданий, определенные их профилем кластера.