サブプロセスのコール中にMaya GUIがフリーズする

image

サブプロセスの呼び出し中にMaya GUIがフリーズする

Q . プロセスが終了するまではMaya GUIがフリーズします。(球体を作成するためだけのものであるため、シーンで実際に実行しなければならないすべてのアクションに近いわけではありません)

A . subprocess.communicate()、子プロセスが完了するまでブロックされるため、問題を単独で解決することはできません。

基本的に、maya.utils.executeDeferredでラップされていない限り、メインスレッド以外のスレッドからmaya.cmdsから何も発行しないでください。これは少し単純化しすぎていますが、大体の目安です。 まだ他のMayaインスタンスでcmdを通常の方法で使用できます-ただし、ユーザーが見るものでは、スレッドからcmdに触れないでください

https://stackoverflow.com/questions/36138817/maya-gui-freezes-during-subprocess-call

Python(Maya)マルチスレッドの使用方法

Mayaスクリプトは本当にメインUIスレッドで実行されることになっています。別のスレッドから実行する場合は、多くの方法があります。
Mayaにはmaya.utils、メインスレッドで遅延評価のメソッドを含むというモジュールが含まれています。以下に簡単な例を示します。

import maya.cmds as cmds
import maya.utils as utils
import threading

def do_in_main():
    utils.executeDeferred (cmds.sphere)

for i in range(10):
    t  = threading.Thread(target=do_in_main, args=())
    t.start()

Pythonは別として、Mayaは古いプログラムであり、いずれにしてもマルチコア指向ではありません。XSIを試してください (^^)

Mayaのスレッド処理はいずれの場合でもトリッキーです。上記の遅延実行なしでメインアプリケーション(APIまたはmayaモジュールの任意の関数)に触れると、おそらくMayaがクラッシュします。必要な場合にのみ使用してください。
そして、メインUIループを使用して実装されているため、executeDeferred などをバッチモードで使用することはできません。

https://stackoverflow.com/questions/16657811/how-to-use-python-maya-multithreading/16661599#16661599

Python とスレッディング
maya.utils.executeInMainThreadWithResult(func, args)

次のアイドル イベント時にメイン スレッドで実行されます。
executeInMainThreadWithResult() をコールしているスレッドは、メイン スレッドがアイドルになりコードを実行するまでブロックされます。

https://knowledge.autodesk.com/ja/support/maya/learn-explore/caas/CloudHelp/cloudhelp/2018/JPN/Maya-Scripting/files/GUID-9B5AECBB-B212-4C92-959A-22599760E91A-htm.html

コメントを残す

メールアドレスが公開されることはありません。

Next Post

GDC 2019「最新の地形機能と今後の道」とUnityによるディープラーニングの紹介」

水 5月 22 , 2019
https://www.gdcvault.com/play/1026150/-Hot-New-Terrain-Features