我一直在看其他人的例子,但我似乎无法让它正常工作。
它要么使用一个核心,要么基本上冻结玛雅如果给太多的处理,但我似乎从来没有得到一个以上的核心一次工作。
举个例子,这就是我想做的,在一个非常基本的层面上。主要是让每个循环在不同的处理器上以不同的值同时运行(在本例中,这两个值将使用两个处理器)

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中还有另一个方法允许调用线程等待响应)。这里有一个link to the maya documentation on this module
然而,这并不能让你绕过问题的第二个方面。Maya python不会为您在处理器之间分割作业:threading将允许您创建单独的线程,但它们都共享同一python intepreter,global interpreter lock将意味着它们最终将等待而不是单独运行。
您不能使用multiprocessing模块,至少不能使用AFAIK模块,因为它会生成新的Maya,而不是将脚本执行推送到正在运行的Maya中的其他处理器中。撇开Python不谈,Maya是一个旧程序,在任何情况下都不是很面向多核的。试试XSI:)
在任何情况下,在Maya中的任何线程处理都是很棘手的——如果您在没有上述延迟执行的情况下触摸主应用程序(基本上是API或Maya.whatever模块中的任何函数),您可能会使Maya崩溃。只有在必要时才使用。
另外,顺便说一下,不能在批处理模式下使用executeferred等,因为它们是使用主UI循环实现的。

10-06 12:43
查看更多