コマンドサーバ


この記事では、PDGのコマンドサーバについて紹介します。コマンドブロックを使用すると、リモートプロセス(HoudiniMayaインスタンスなど)を起動し、サーバコマンドを送信したり、サーバをシャットダウンすることができます。

オーバービュー

 「コマンドサーバ」は長時間実行されるプロセスです。コマンドサーバを起動すると、セッション内の複数のノード/ワークアイテムにおいて、サーバがシャットダウンされるまで、コマンドサーバと対話することができます。

 これにより、HoudiniMayaのインスタンスなどのリモートアプリケーションを起動し、一連のコマンドを送信することができます。たとえば、開始ジオメトリファイルを開く際にには、そのファイルに対していくつかの操作を実行し、結果の出力を行います。

Houdiniジオメトリ生成ネットワークをコマンドサーバとしてではなく「ワンショット」として実行できる、HDA ProcessorノードおよびGeometry Importノードも存在します。)

 コマンドブロックはフィードバックループブロックに似ています。内部のワークアイテムはセッション内で順番に連続して実行されます。ブロックパラメータを使用すると、複数のシリアルセッションを開始できます。

 Houdiniには、Pythonスクリプトを永続Houdiniインスタンスに送信するためのものと、MELスクリプトを永続Mayaインスタンスに送信するためのものの2つの組み込みコマンドチェーンツールが付属しています。 XML-RPCまたは生のTCPを使用してコマンドを開始、停止、および任意のサーバに送信できる汎用のコマンドチェーンもあります。

使用方法

  1.  TOPネットワークエディタで、Tabキーを押して、 “Maya Command Chain”などのコマンドチェーンツールを選択します。

    このツールは、サービスタイプに固有のService BeginノードとServer Endノードを配置します。

  2. Beginノードを選択します。パラメータエディタで、セッション数を指定する方法を選択します。

    • デフォルトでは、Number of sessionsパラメータで指定された回数のイテレーションが実行されます。Beginノードにアップストリームアイテムがある場合、コマンドチェーンは各入力アイテムに対してsession_count回実行します。
    • Beginノードに静的ワークアイテムがある場合は、上流のアイテムからセッションカウントを有効にできます。これにより、セッション数がアップストリームアイテムの数に設定されます。これにより、ワークアイテムごとに1回、ブロック内のコマンドチェーンが繰り返されます。

    複数のセッションが連続してクックされます。ブロックは最初のセッションを上から下にクッキングしてから2番目のセッションを開始します。

  3. Beginノードが動的にアイテムを生成する場合は、終了ノードでも
    Use dynamic partitioningをオンにする必要があります。
  4. Command SendノードをBeginノードとEndノードの間に接続し、ループさせます。

Houdiniは、ブロックを視覚化しやすくするため、ブロック内のノードの周囲に境界線を描画します。

*注釈

  • Beginノードは、1つ以上のサーバセッションを開始するワークアイテムを生成します。 “startup”アイテムが完了した後もサーバプロセスは実行を続けます。
  • Endノードは、各セッションの最後のアップストリームコマンドが完了した後にサーバシャ​​ットダウンコードを実行します。
    (コマンドが完了していなくても、グラフがクッキングを停止すると、スケジューラは自動的にすべての既知のサーバプロセスを終了します。)
  • レンダーファームスケジューラを使用している場合、各サーバセッションは1台のマシンにロックされます。
  • ノード同士の関係性を明確にするために、ブロックのBeginノードとEndノードには同じ色を付けることを推奨します。組み込みのコマンドチェーンツールによって配置された時点のデフォルトノードは両ノードの色が異なります。ノードの色を統一し、かつブロックごとに別の色に設定しておけば、ネストしたループの区別が容易になります。

    ブロックの周囲の境界線は、Endノードの色になります。

  • 新しく作成されたサーバはアクティブスケジューラに登録されます。スケジューラAPIを使用して、名前でサーバへの参照ができます。サーバ自体はワークアイテムによって開始されますが、そのワークアイテムのクックが終了しても、サーバの実行は継続されます。クックの終了とサーバが終了は同期しておりません。