Я хочу написать скрипт, который использует встроенные таймеры производительности Nuke для проверки работоспособности текущего компа.
Для этого я очищаю весь кеш зрителя, чтобы начать все заново. Теперь мне нужно запустить кеширование. Как кажется, единственный способ добиться этого - использовать nuke.activeViewer().play(1)
. Используя этот вызов, я кэширую свою временную шкалу, но у меня нет указания на , когда временная шкала полностью кэширована, чтобы иметь возможность остановить и сбросить таймеры Performace.
Мне известно, что я также могу использовать nuke.activeViewer().frameControl(+1)
, чтобы пропустить 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 или что-то подобное?
Любая помощь очень ценится!