Main Content

recreate

既存のジョブから新規ジョブを作成する

説明

newjob = recreate(oldjob) は、既存のジョブに基づいて、oldjob と同じタスクとオプションを含む新規ジョブ オブジェクトを作成します。古いジョブはどんな状態でもかまいません。新しいジョブの状態は保留中です。oldjobbatch を使用して作成されていた場合、MATLAB® は自動的に新しいジョブを投入します。

newjob = recreate(oldjob,'Tasks',tasksToRecreate) は、tasksToRecreate に対応する複数のタスクをもつジョブ オブジェクトを作成します。通信ジョブには 1 つのタスクしかないため、このオプションは独立ジョブのみをサポートします。

newjob = recreate(oldjob,'TaskState',states) は、states で指定された State をもつタスクに対応する、複数のタスクをもつジョブ オブジェクトを作成します。通信ジョブには 1 つのタスクしかないため、このオプションは独立ジョブのみをサポートします。

newjob = recreate(oldjob,'TaskID',ids)oldjob のタスクを含むジョブ オブジェクトを作成しますが、このタスクは、ids で指定された ID をもつ複数のタスクに対応します。通信ジョブには 1 つのタスクしかないため、このオプションは独立ジョブのみをサポートします。

すべて折りたたむ

このアプローチは、タスクの依存するファイルが存在しなくなった場合に便利です。

既定のクラスター プロファイルを使用して新しいジョブを作成します。この例では、ローカル配列プールです。

cluster = parcluster;
job = createJob(cluster);

いくつかのタスクを作成します。特に、存在しない MAT ファイルに依存するタスクを作成します。

createTask(job,@() 'Task1',1);
createTask(job,@() load('myData.mat'),1);

ジョブを投入して完了するまで待ちます。2 番目のタスクの MAT ファイルは存在しないため、ジョブは失敗します。job に対して fetchOutputs を呼び出して結果を取得すると、エラーがあります。対応するタスクの Error プロパティを使用して、エラーをチェックします。

submit(job);
wait(job);
job.Tasks(2).Error
ans = 
  ParallelException with properties:

     identifier: 'MATLAB:load:couldNotReadFile'
        message: 'Unable to find file or directory 'myData.mat'.'
          cause: {}
    remotecause: {[1×1 MException]}
          stack: [1×1 struct]
     Correction: []

関数 save を使用して、2 番目のタスクから参照される MAT ファイルを作成します。エラーの発生したタスクを含む新しいジョブを作成するには、recreate で名前と値のペア 'Tasks' を使用し、関数 hasError を指定します。他のタスクのセットを選択する場合は、独自の関数を定義できます。

str = 'Task2';
save myData str
newjob = recreate(job,'Tasks',@hasError);

新しいジョブを投入し、完了するまで待ってから、出力を取得します。今回は MAT ファイルが存在しているため、ジョブは失敗しません。

submit(newjob);
wait(newjob);
out = fetchOutputs(newjob);
out{1}
ans = struct with fields:
    str: 'Task2'

この例では、ジョブ myJob 全体を再作成する方法を示します。

newJob = recreate(myJob)               

この例では、ジョブ oldIndependentJob の保留中のタスクのみを持つ独立ジョブを再作成する方法を示します。

newJob = recreate(oldIndependentJob,'TaskState','pending');

この例では、ジョブ oldIndependentJob から、21 から 32 までの ID のタスクのみをもつ独立ジョブを再作成する方法を示します。

newJob = recreate(oldIndependentJob,'TaskID',[21:32]);

この例では、ユーザー Mary によって投入されたものの失敗したジョブをすべて見つけて、それを再作成する方法を示します。既定のクラスターは、Mary が自分のジョブを投入したクラスターと仮定します。

c = parcluster();
failedjobs = findJob(c,'Username','Mary','State','failed');
for m = 1:length(failedjobs)
    newJob(m) = recreate(failedjobs(m));
end

入力引数

すべて折りたたむ

複製対象の元のジョブ。parallel.Job オブジェクトとして指定します。

例: newJob = recreate(oldjob); submit(newJob);

データ型: parallel.Job

oldjob から複製するタスク。次として指定します。

  • oldjob に属する parallel.Task からなる配列。

  • 再作成する oldjob 内のタスクを示す 1 x N の logical 配列。Noldjob.Tasks のサイズです。

  • 入力引数として oldjob.Tasks を受け入れる関数ハンドル。この関数は再作成する oldjob 内のタスクを示す 1 x N の logical 配列を返さなければなりません。Noldjob.Tasks のサイズです。

エラーまたは警告を含むタスクを返すには、この構文を事前定義された関数 @hasError および hasWarnings と共に使用します。

例: newJob = recreate(oldjob,'Tasks',@hasError | @hasWarnings);

データ型: parallel.Task | logical | function_handle

複製するタスクの状態。string または string の cell 配列として指定します。states は、oldjob からの再作成が必要なタスクの状態を表します。有効な状態は 'pending''running''finished' および 'failed' です。

例: newJob = recreate(oldJob,'TaskState','failed');

データ型: char | string | cell

oldjob から複製するタスクの ID。整数のベクトルとして指定します。

例: newJob = recreate(oldIndependentJob,'TaskID',[1 5]);

データ型: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64

バージョン履歴

R2014a で導入