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