如何使用python(maya)多线程

2023-12-01

我一直在看其他人的例子,但我似乎无法让它正常工作。
它要么使用单个核心,要么如果处理太多,基本上会冻结 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(使用前将#替换为@)

如何使用python(maya)多线程 的相关文章

随机推荐

  • 无法通过 Ubuntu 终端在 Github 上推送

    我正在尝试从我的 Ubuntu 机器推送到 github 我可以从 Visual Studio Code 终端推送 但无法从 Ubuntu 终端或 Android Studio 终端推送 每次我尝试从终端或 android studio 终
  • 如何终止 jboss 超时的数据库事务

    我用的是jboss 4 2 3 它具有设置 TransactionTimeout 在jboss service xml中 指定允许事务执行多长时间 不幸的是 当超时过去时 执行不会立即中止 如果事务正在执行某些操作 则只会将其标记为稍后回滚
  • 插值内的 Angular MatToolTip 条件

    我正在为 MatToolTip 添加角度条件 首先 以下内容仅适用于 1 个字符串分配 matToolTip myData name 但我需要添加如下条件 matToolTip myData hasName myData name myDa
  • java https网络问题

    我正在尝试实现最简单的 HTTPS 通信程序 网上有很多例子 但我没能成功运行 这是一个例子 public class ReadHttpsURL1 static final int HTTPS PORT 443 public static
  • 为什么在 python map() 和 multiprocessing.Pool.map() 中得到不同的答案?

    我有一个奇怪的问题 我有一个格式的文件 START 1 2 STOP lllllllll START 3 5 6 STOP 我想读一下之间的内容START and STOP作为块 并使用my f处理每个块 def block generat
  • 通过 JavaScript 检索所有已安装打印机的列表

    我收到了一个网页的屏幕截图 其中显示了组合框中客户端可访问的所有已安装打印机 本地和网络打印机 的列表 并让用户选择一台 甚至还有一个刷新列表的按钮 我无权访问该页面 无法证明其功能 是否有可能在网页中以任何方式执行此操作或模拟此工作 如果
  • Office365 REST API - 创建带有附件的日历事件

    我无法使用 Office365 的 Rest API 创建带有附件的日历事件 创建没有附件的事件不是问题 尝试创建带有附件的事件会创建事件 但不会添加我发送的文件 服务器以 201 响应代码进行响应 我正在向以下地址发送 POST 请求 h
  • 按上次修改日期时间过滤 Onedrive 项目

    我尝试通过 lastModifiedDatetime 属性从 Microsoft Graph 端点中筛选 OneDrive 项目 像这样的东西 https graph microsoft com beta me drive special
  • 如何使用 Groovy 的正则表达式获取部分匹配的布尔值?

    Groovy 有一个正则表达式 匹配运算符 The 文档说它返回一个布尔值 但需要 严格匹配 它没有定义 严格匹配 我不熟悉该表达式所在的任何正则表达式系统false 但是 这就是 Groovy 告诉我的 foo bar baz bar g
  • 为什么不捕获一般异常

    我的VS刚刚告诉我 警告 2 CA1031 Microsoft Design 修改 Program Main string 以捕获比 Exception 更具体的异常或重新引发异常 我为什么要那么做 如果我这样做 并且没有捕获所有异常来处理
  • 如何实时回显输出(在脚本完成之前)?

    在脚本执行完毕之前如何输出到浏览器 例如 下面的代码将一次输出所有 100 个 hi 我该如何制作 以便在读取 处理该代码部分后立即输出 例如 PHPBB3论坛显示了逐步安装过程 在循环之前调用 ob implicit flush 请注意
  • 进入振奋精神; Qi还是X3?

    我正在和一个朋友一起为一个小型个人项目做一名口译员 我们开始实现所有类和通用结构 其中代码将被翻译然后执行 只是为了推迟将实际解析代码放入这些结构中 现在我们必须构建解析器 经过一番搜索 我发现到处都有帖子和人们谈论spirit Qi和sp
  • whereArrayContains 限制为 10

    我要过滤问题集合基于tagIDs 一切工作正常但是其中数组包含最多适用于 10 个 id 我怎样才能提高我的结构工作超过10年tagIDs并且确保尽可能少地调用服务器减少金钱支出 Firestore root questions colle
  • 如何使用 Robot 在 IE11 中打开保存对话框弹出窗口

    我正在 IE11 上执行测试 无法使用任何其他浏览器 在执行时 我会弹出下载窗口 并希望将文件下载到 TestResult 文件夹中 我如何使用 Robot 来实现这一目标 我也读过有关 AutoIT 的内容 但不确定 因为我对这些还很陌生
  • AS3 - Flash/AIR 套接字通信 writeUTFBytes 仅有效一次

    我有一个套接字服务器侦听 2 个端口 其中 1 个端口用于套接字服务器 1 个端口用于策略服务器 我的代码如下 在这种情况下 数据发送和接收完全正常 但是 例如 如果我添加一个带有简单按钮的按钮 socket writeUTFBytes M
  • Exoplayer - 保存和恢复片段内旋转的状态

    我有一个托管 SimpleExoplayer 的片段 我想确保我正确处理屏幕旋转 现在 播放器重置到屏幕旋转的起点 我已经在 onStart 和 onResume 中实现了方法 所以我很好奇我需要哪些额外的代码 Override publi
  • 更改 Asp.Net 5 中的组件视图位置

    在 ASP NET 5 上 组件视图必须位于以下两个位置之一 Views NameOfControllerUsingComponent Components ComponentName Default cshtml Views Shared
  • 在 SQL 中计算连续缺勤

    我需要计算 SQL 中在某个日期范围内连续缺勤 X 次的所有员工 我们有一个缺勤表 其中包含员工每天缺勤的 1 条记录 还有一个日历表 其中包含一年中的工作日 tblAbsences EmployeeID int AbsenceDate d
  • excel VBA 不应该发生溢出错误

    Sub TestFunction Dim var As Double var 25 24 23 22 21 20 End Sub 我收到此 vba 操作的溢出错误 当我在具有函数的单元格中运行它时 我得到 127 512 000 这可能是什
  • 如何使用python(maya)多线程

    我一直在看其他人的例子 但我似乎无法让它正常工作 它要么使用单个核心 要么如果处理太多 基本上会冻结 Maya 但我似乎从来没有让多个核心同时工作 例如 这就是我希望它在非常基本的层面上做的事情 主要只是让每个循环在具有不同值的不同处理器上