サブプロセスの呼び出し中に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 threadingdef 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() をコールしているスレッドは、メイン スレッドがアイドルになりコードを実行するまでブロックされます。