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