【问题标题】:How to make cmds.duplicate() execute immediately when called in maya如何使 cmds.duplicate() 在 Maya 中调用时立即执行
【发布时间】:2022-11-14 15:18:47
【问题描述】:

在maya中调用时如何使cmds.duplicate立即执行?而不是等待整个脚本运行完后再分批执行。比如下面这个脚本,所有的执行结果都会在整个脚本执行完后立即出现

import time

for i in range(1, 6):
  pm.select("pSphere{}".format(i))
  time.sleep(0.5)
  cmds.duplicate()

我试过使用 python 多线程,像这样

import threading
import time

def test():
    for i in range(50):
        cmds.duplicate('pSphere1')
        time.sleep(0.1)

thread = threading.Thread(target=test)
thread.start()
#thread.join()

有时它可以成功,但有时它会使 Maya 崩溃。如果主线程加入,就达不到效果了。当我想做大量的cmds.duplicate时,会导致内存消耗非常高,程序运行越来越慢。另外,整个python脚本运行后,所有重复的结果都一起出现,所以我怀疑当我调用cmds进行复制的时候,Maya并没有完成命令的执行和输出,而是暂时把结果放到了一个容量可变的容器中。随着我调用次数的增加,容器动态扩展的过程导致程序越来越慢,内存消耗也急剧增加。因为我看到其他插件可以实时看到命令执行结果,所以我认为这应该是一个正确的方法,只是我还没有找到

【问题讨论】:

    标签: python maya pymel maya-api


    【解决方案1】:

    简单的答案是你不知道,一般来说,maya 命令和大多数与 Maya 的交互都不是线程安全的 线程通常用于数据操作,然后才用于在 Maya 中操作任何内容,但是一旦您开始创建节点或设置属性,或任何 Maya 修改,就没有线程。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-07-16
      • 1970-01-01
      • 2011-06-15
      • 2023-04-11
      • 2021-10-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多