python - 使用 NUKE API 缓存脚本

标签 python caching nuke

我想编写一个脚本,使用 Nuke 的内置性能计时器来“健全检查”当前的比较。 为此,我清除了所有查看器缓存以重新开始。现在我需要触发缓存。看来实现这一目标的唯一方法是使用nuke.activeViewer().play(1)。使用此调用,我可以缓存时间线,但没有任何指示何时时间线被完全缓存以便能够停止和重置性能计时器。

我知道我也可以使用 nuke.activeViewer().frameControl(+1) 一次跳过一帧,直到到达最后一帧,但在我看来使用此调用不会导致组件缓存该帧。实际上,时间线表明该帧已被缓存,但 nuke.activeViewer().node().frameCached(nuke.frame()) 返回 false

尽管如此,我还是写了一些有用的东西,但只是勉强有效。

这里是:

import nuke

nuke.clearRAMCache()

vc = nuke.activeViewer()
v = vc.node()
fr = v.playbackRange()

vc.frameControl(-6)

print fr.maxFrame()

cached_frames = 0
while cached_frames < fr.maxFrame():
    print "Current Frame: {}".format(nuke.frame())

    if not v.frameCached(nuke.frame()):
        print "Frame: {} not cached".format(nuke.frame())

        while not v.frameCached(nuke.frame()):
             print "caching..."
             vc.play(1)
        print "Frame: {} cached".format(nuke.frame())
        print "Incrementing from caching"
        cached_frames += 1
    else:
        vc.frameControl(1)
        print "incrementing from skipping"
        #cached_frames += 1
    print "Cached Frames: {}".format(cached_frames)

print "DONE"
vc.stop()

我知道这不是一段非常好的代码,但有时这些行执行得非常好,而有时它只是随机挂起一段时间(至少看起来如此)。

那么 Nuke 或类似内容中的查看器是否有可用或可写的回调?

非常感谢任何帮助!

最佳答案

您希望达到什么具体的性能要求?

Nuke 有其内置功能

“Nuke 可以在屏幕上显示准确的性能计时数据或将其输出到 XML 文件,以帮助您解决缓慢脚本中的瓶颈。启用性能计时后,计时信息会显示在节点图中,并且节点本身会根据每个节点所花费的总处理时间的比例,从绿色(快速节点)到红色(慢速节点)。” -

referred to

关于python - 使用 NUKE API 缓存脚本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55097531/

相关文章:

python - 我尝试在 nuke 脚本编辑中使用 Kivy,但它会转换 'unable to find any valuable Text provider at all'

linux - 是否有类似于 Quartz Composer 的应用程序,但适用于任何通用类型的数据?

python - 如果 URL 以 .com 或 .net 结尾,则提取该 URL 的初始部分

python - 粒子实例没有属性 '__getitem__'

asp.net - Windows Azure 缓存预览

python - 嘿 python 解析 tcl 变量?核武器

Python 正则表达式 - 为什么字符串结尾 ($ 和\Z) 不适用于组表达式?

python - 在 Python 中,为什么不能在使用 subprocess 创建文件后立即对其进行解析?

java - 实现 LRU 缓存的最佳方法

使用 Redis 或 SQL Server 的 ASP.NET Core 分布式缓存