MATLAB ジョブ スケジューラのジョブとタスクへのコールバックの適用
MATLAB® ジョブ スケジューラには、MATLAB ジョブ スケジューラ クラスターのジョブやタスクが特定の状態に変化するたびにクライアント セッションでコールバックをトリガーする機能があります。
MATLAB ジョブ スケジューラ クラスターのジョブやタスクを表すクライアント オブジェクトには、以下のプロパティが含まれています。
コールバック プロパティ | オブジェクト | クラスター プロファイル マネージャーのフィールド | 説明 |
---|---|---|---|
QueuedFcn | ジョブのみ | JobQueuedFcn | MATLAB ジョブ スケジューラのキューにジョブが投入されたときにクライアントで実行する関数を指定します |
RunningFcn | ジョブまたはタスク |
| ジョブやタスクが実行を開始したときにクライアントで実行する関数を指定します |
FinishedFcn | ジョブまたはタスク |
| ジョブやタスクが実行を完了したときにクライアントで実行する関数を指定します |
クラスター プロファイル マネージャーで、これらの各プロパティを任意の有効な MATLAB コールバック値に設定できます。表とクラスター プロファイルの追加と変更を参照してください。コールバックは Handle Graphics® に対して同様に動作し、呼び出し元のオブジェクト (ジョブまたはタスク) と、イベント データの空の引数をコールバック関数に渡します。
これらのプロパティは、それが設定されているクライアント MATLAB セッションにのみ適用されます。後のセッションで同じジョブやタスクのオブジェクトにアクセスしても、以前のセッションで行われた設定は継承されません。コマンド ラインの既存のジョブとタスクにプロパティを適用することはできますが、クラスター プロファイルの設定は、これらのオブジェクトが最初に作成されたときにのみ適用されます。
メモ
コールバック プロパティは、MATLAB ジョブ スケジューラ クラスターを使用している場合にのみ使用できます。
この例では、クライアント セッションのコマンド ラインでジョブやタスクのコールバックを作成する方法を示します。
次のコンテンツを使って、MATLAB クライアントのパスでコールバック関数 clientTaskCompleted.m
を作成し保存します。
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 ジョブ スケジューラ クラスター プロファイルを編集します。保存されたプロファイルは、次のように表示されます。
次のコンテンツを使って、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
による送信では、該当するジョブやタスクのコールバックが使用されます。並列プールによって、クラスター プロファイルで定義されたジョブ コールバックがトリガーされることがあります。