我一直在看其他人的例子,但我似乎无法让它正常工作。
它要么使用单个核心,要么如果处理太多,基本上会冻结 Maya,但我似乎从来没有让多个核心同时工作。
例如,这就是我希望它在非常基本的层面上做的事情。主要只是让每个循环在具有不同值的不同处理器上同时运行(在这种情况下,这两个值将使用两个处理器)
mylist = [50, 100, 23]
newvalue = [50,51]
for j in range(0, len(newvalue)):
exists = False
for i in range(0, len(mylist)):
#search list
if newvalue[j] == mylist[i]:
exists = True
#add to list
if exists == True:
mylist.append(mylist)
这有可能实现吗?我想要使用它的实际代码每个循环可能需要几秒钟到大约 10 分钟,但理论上它们可以同时运行,所以我认为多线程会加快加载速度
请记住,我对 python 还比较陌生,所以一个例子将非常感激
干杯:)
对此确实有两种不同的答案。
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()
这将允许您从单独的线程使用 Maya ui 执行操作(utils 中还有另一种方法也允许调用线程等待响应)。这是一个指向此模块的 Maya 文档的链接
然而,这并不能解决问题的第二个方面。 Maya python 不会为您在处理器之间分配工作:threading
将允许您创建单独的线程,但它们都共享相同的 python 解释器和全局解释器锁这意味着他们最终会等待而不是独立运行。
你不能使用multiprocessing
模块,至少不是 AFAIK,因为它会生成新的 Maya,而不是将脚本执行推送到您正在运行的 Maya 中的其他处理器中。除了 Python 之外,Maya 是一个古老的程序,无论如何都不是非常面向多核。尝试 XSI :)
无论如何,Maya 中的任何线程处理都是棘手的 - 如果您在没有上述延迟执行的情况下接触主应用程序(基本上是 API 或 maya.whatever 模块中的任何函数),您可能会导致 Maya 崩溃。仅在必要时才使用它。
而且,顺便说一句,您不能在批处理模式下使用executeDeferred 等,因为它们是使用主UI 循环实现的。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)