複数のノードを組み合わせて実行する
PDG の基本(1) - 0 から始める PDG はじめる では単独のノードで単純な処理を実行しましたが、多くの場合
単独の処理を実行するだけではなく連続した処理を実行させたいはずです。
PDG では、ノードとノードを接続することで、複数の処理を連続して実行することができます。
前回作成した GenericGenerator に PythonScript を追加します。
GenericGenerator は ItemCount で指定した数の WorkItem を生成しています。
追加した PythonScript で WorkItem を Generate します。
すると、上流の WorkItem の個数に対応した WorkItem が生成されました。
作成された WorkItem は上流の WorkItem と依存関係を持ちます。 WorkItem の〇をクリックすると、依存する WorkItem と WorkItem が接続されているのがわかります。
複数の WorkItem に分割する
1 つの WorkItem ごとに次の別の処理を実行する、というだけでも便利ですが
それだけではなく、1 つのジョブから救数の WorkItem にさらに分割したいようなケースもあるはずです。
もちろんそういった処理も可能で、この場合はこのように WorkItem の依存関係が 1 つの WorkItem から複数に分割します。
代表的なノードが Wedge ノードで、このノードを使用すると入力の WorkItem を指定の条件に分割し、別のパラメーターで実行することなどが
可能になります。
WedgeCount を 3 にして、上流の WorkItem1 つに対して、WedgeCount だけ WorkItem を生成します。
生成しただけではあまり意味がありません。
PDG では、WorkItem に対してアトリビュートを指定して、ノードで指定されたひな形の処理をベースにバリエーションを
持たせた処理を実行します。
Wedge も、WorkItem に対してアトリビュートを追加してそのバリエーション分の WorkItem を生成します。
試しに int 型の sampleCountAtribute を追加し、それを 0 から 2 までの範囲で生成します。
TaskGraphTable で確認すると、sampleCount が 0 ~ 2 の WorkItem が生成されているのがわかります。
Wedge ノードをさらに追加すると、さらにアトリビュートを追加します。
WorkItem のアトリビュートは、Wedge で指定した数だけ作成されました。
Wedge ノードでバリエーションを作成しましたが、これだけだとあまり意味がありません。
ですが、いわゆるこの Wedge で作成した WorkItem とそのアトリビュートは、実行したい処理のバリエーション、プログラミング的にいうと
引数で渡したいパラメーターを、n×n で生成してくれます。
Wedge の後に、Wedge で作成したバリエーシ ョンだけ実行したい処理を追加します。
処理は PythonScript を使用してみます。
sampleCount = work_item.attrib("sampleCount").value()
paramB = work_item.attrib("paramB").value()
def add(a,b):
return a+b
val = add(sampleCount,paramB)
work_item.addAttrib("result",pdg.attribType.Float).setValue(val)
若干冗長ですが、足し算をする処理を Python で書いてみます。
上流の WorkItem は、足し算するときの a と b に入るバリエーションだけ作成されています。
この値はアトリビュートで指定されているので、work_item.attrib を使用して、使用するアトリビュートを取得します。
実行した結果の数値は、実行しただけでは意味がありません。
この値を、さらに下流でも使いたくなるはずです。
そのため、addAttrib を使用して新しくアトリビュートを追加し、下流のノードでも利用できるようにしておきます。
print(work_item.attrib("result").value())
あたしく PythonScript ノードを作り、アトリビュートを確認します。
無事結果を受け取れているのがわかります。