Main Content

MATLAB ジョブ スケジューラのジョブとタスクへのコールバックの適用

MATLAB® ジョブ スケジューラには、MATLAB ジョブ スケジューラ クラスターのジョブやタスクが特定の状態に変化するたびにクライアント セッションでコールバックをトリガーする機能があります。

MATLAB ジョブ スケジューラ クラスターのジョブやタスクを表すクライアント オブジェクトには、以下のプロパティが含まれています。

コールバック プロパティオブジェクトクラスター プロファイル マネージャーのフィールド説明
QueuedFcnジョブのみJobQueuedFcn

MATLAB ジョブ スケジューラのキューにジョブが投入されたときにクライアントで実行する関数を指定します

RunningFcnジョブまたはタスク

JobRunningFcn

TaskRunningFcn

ジョブやタスクが実行を開始したときにクライアントで実行する関数を指定します

FinishedFcnジョブまたはタスク

JobFinishedFcn

TaskFinishedFcn

ジョブやタスクが実行を完了したときにクライアントで実行する関数を指定します

クラスター プロファイル マネージャーで、これらの各プロパティを任意の有効な MATLAB コールバック値に設定できます。表とクラスター プロファイルの追加と変更を参照してください。コールバックは Handle Graphics® に対して同様に動作し、呼び出し元のオブジェクト (ジョブまたはタスク) と、イベント データの空の引数をコールバック関数に渡します。

これらのプロパティは、それが設定されているクライアント MATLAB セッションにのみ適用されます。後のセッションで同じジョブやタスクのオブジェクトにアクセスしても、以前のセッションで行われた設定は継承されません。コマンド ラインの既存のジョブとタスクにプロパティを適用することはできますが、クラスター プロファイルの設定は、これらのオブジェクトが最初に作成されたときにのみ適用されます。

メモ

コールバック プロパティは、MATLAB ジョブ スケジューラ クラスターを使用している場合にのみ使用できます。

例1 コマンド ラインでのコールバックの作成

この例では、クライアント セッションのコマンド ラインでジョブやタスクのコールバックを作成する方法を示します。

次のコンテンツを使って、MATLAB クライアントのパスでコールバック関数 clientTaskCompleted.m を作成し保存します。

function clientTaskCompleted(task,eventdata)
   disp(['Finished task: ' num2str(task.ID)])

ジョブを作成し、ディスプレイに情報を送信する無名関数への関数ハンドルを使用して、その QueuedFcnRunningFcnFinishedFcn の各プロパティを設定します。

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 ジョブ スケジューラ クラスター プロファイルを編集します。保存されたプロファイルは、次のように表示されます。

The Cluster Profile Manager showing the callback properties of a MATLAB Job Scheduler cluster profile. The JobFinishedFcn, JobRunningFcn, and JobQueuedFcn all display the name of the job and its status. The TaskFinishedFcn is the clientTaskCompleted function.

次のコンテンツを使って、MATLAB クライアントのパスでコールバック関数 clientTaskCompleted.m を作成し保存します(前の例でこの関数を作成した場合は、それを使用できます)。

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

ヒント

  • 競合が起こる可能性のあるコールバック関数でコードを実行することは避けてください。たとえば、1 つのジョブ内の各タスクに結果をプロットするコールバックがある場合、タスクが終了する順番に保証はないので、プロットが別のプロットで上書きされることがあります。同様に、すべてのタスクで FinishFcn コールバックが完了する前に、ジョブの FinishFcn コールバックの開始がトリガーされることがあります。

  • batch による送信では、該当するジョブやタスクのコールバックが使用されます。並列プールによって、クラスター プロファイルで定義されたジョブ コールバックがトリガーされることがあります。