Кэширование скрипта с использованием NUKE API - PullRequest
1 голос
/ 11 марта 2019

Я хочу написать скрипт, который использует встроенные таймеры производительности 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 или что-то подобное?

Любая помощь очень ценится!

Ответы [ 2 ]

0 голосов
/ 19 марта 2019

Подражание обратным вызовам на шкале времени просмотра возможно только с помощью потоков. Просто создайте поток, проверьте текущий кадр для кэширования и перейдите к следующему кадру, используя nuke.activeViewer().frameControl() из этого потока.

0 голосов
/ 18 марта 2019

Какое конкретное требование в отношении производительности вы хотите достичь?

Nuke имеет встроенную функцию

"Nuke может отображать точные данные о сроках производительности на экране или выводить их в файл XML, чтобы помочь вамустранять узкие места в медленных сценариях. Когда включена синхронизация производительности, информация о синхронизации отображается на графике узлов, а сами узлы окрашиваются в соответствии с пропорцией общего времени обработки, проведенного в каждом из них, от зеленого (быстрые узлы) до красного(медленные узлы). "-

относится к

...