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