Houdini 20.0 PDG/TOPsを使ってタスクを実行する方法

パーティショナー系ノードコールバック

パーティショナー系ノードは複数の上流ワークアイテムを単一パーティションにグループ化します。

ノードコールバック

パーティショナー系ノードには、上流ワークアイテムのリストを入力として受け取るコールバック関数の1つしかありません。 このコールバック関数では、パーティションオペレーションのステータスを示したpdg.result値を返す必要があります。

onPartition(self, partition_holder, work_items)pdg.result

このコールバックは、PDGグラフのクック中にパーティショナー毎に1回評価、または、( Split by Attribute有効 な場合)固有のアトリビュート値毎に1回評価されます。 パーティショナーが静的だった場合、このコールバックは静的プリパス時に実行されます。 動的だった場合、すべての入力ワークアイテムが生成された後にクック時に評価されます。 この関数のwork_items引数には、パーティションの対象となる上流ワークアイテムのリストを渡します。 partition_holder引数には、パーティションの作成で使用されるpdg.PartitionHolderクラスのインスタンスを渡します。

各パーティションは、onPartition関数から提供された固有の数値を使って定義されます。 ワークアイテムは、addItemToPartition関数にそのワークアイテム自身とパーティション番号を引数に渡すことでパーティションに追加されます:

# 各ワークアイテムを固有のパーティションに追加します。
partition_holder.addItemToPartition(work_items[0], 0)
partition_holder.addItemToPartition(work_items[1], 1)

# 両方のワークアイテムを3番目の共通パーティションに追加します。
partition_holder.addItemToPartition(work_items[0], 2)
partition_holder.addItemToPartition(work_items[1], 2)

ワークアイテムを複数のパーティションに追加したり、どのパーティションにも追加しないようにすることもできます。 場合によっては、作成されるパーティションの数がわかる前に、ワークアイテムをすべてのパーティションに追加したい事があります。 addItemToAllPartitionsメソッドは、そのワークアイテムがすべてのパーティション(そのコールの後で追加されたパーティションも含む)に属することをマークします。

他にも、ワークアイテムをそのパーティションで requirement(必須) としてマークすることもできます。 必須としてマークされたワークアイテムが削除されると、パーティション内にまだ他のワークアイテムが存在していても、そのパーティションもまるごと削除されます。 例えば、上流ワークアイテムのペアからパーティションを作成するPartition by Combinationがこの挙動に該当します。 ペアのどちらかのワークアイテムが削除されると、もはやペアではなくなるので、そのパーティションが無効になります。 以下のコードは、入力ワークアイテムの固有のペア毎にパーティションを形成するonPartition関数の実装例です:

partition_index=0

# ワークアイテムの外側ループ
for index1, item1 in enumerate(work_items):

    # ワークアイテムの内側ループ
    for index2, item2 in enumerate(work_items):

        # 順番はどうであれ、ワークアイテムのペア毎に1つだけパーティションを作成したいとします。
        # 以下のチェックがなかった場合、(a,b)と(b,a)の両方に対してパーティションが作成されてしまいます。
        if index2 <= index1:
            continue

        # 次で利用可能なパーティションに両方のワークアイテムを追加し、それらのワークアイテムをrequired(必須)としてフラグを立てます。
        partition_holder.addItemToPartition(item1, partition_index, True)
        partition_holder.addItemToPartition(item2, partition_index, True)

        partition_index += 1

PDG/TOPsを使ってタスクを実行する方法

基本

初心者向けチュートリアル

次のステップ

リファレンス

  • すべてのTOPsノード

    TOPノードは、データをネットワークに送り込んでワークアイテムに変換し、色々なノードでそれを制御するワークフローを定義します。たいていのノードは、ローカルマシンまたはサーバーファーム上で実行可能な外部プロセスを表現しています。

  • プロセッサ系ノードコールバック

    プロセッサ系ノードはスケジューラで実行可能なワークアイテムを生成します。

  • パーティショナー系ノードコールバック

    パーティショナー系ノードは複数の上流ワークアイテムを単一パーティションにグループ化します。

  • スケジューラ系ノードコールバック

    スケジューラ系ノードはワークアイテムを実行します。

  • 独自のファイルタグとハンドラー

    PDGはファイルタグを使用して出力ファイルのタイプを決めます。

  • Python API

    ディペンデンシーグラフを扱うためのPython PDGパッケージのクラスと関数。

  • Job API

    ジョブスクリプトで使用するPython API

  • ユーティリティAPI

    Python pdgutilsパッケージのクラスと関数は、PDGノードでの使用だけでなく、スクリプトやプロセス外のジョブスクリプトでの使用も想定されています。