That first paragraph was poorly-worded. What I meant to say is
"nuke.executeInMainThreadWithResult is going to impose a performance hit on
your sample code due to thread juggling, since each switch requires the running
Python thread to grab the GIL."
-Nathan
From: Nathan Rusch
Sent: Monday, July 28, 2014 10:11 AM
To: Nuke Python discussion
Subject: Re: [Nuke-python] Running heavy code in separate thread withprogressbar
No, it doesn't create a thread. However, nuke.executeInMainThreadWithResult is
going to impose a performance hit, since your sample code is juggling threads,
and each switch requires the running Python thread to grab the GIL.
I think what Dan was getting at is that you should refactor your code so the
callable you pass to executeInMainThread does its own looping internally, to
cut down on thread switching in Python. Also, you should only use
executeInMainThreadWithResult if you actually need the result from the main
thread call; use executeInMainThread otherwise. Finally, make sure to create
your nodes without control panels.
This runs in a little over a second:
def createBlurs(count, progressTask):
for i in xrange(count):
nuke.createNode('Blur', inpanel=False)
progressTask.setProgress(i / 10)
def threadCallable():
task = nuke.ProgressTask('Create')
task.setMessage('Creating blur nodes')
nuke.executeInMainThread(createBlurs, args=(1000, task))
threading.Thread(target=threadCallable).start()
-Nathan
From: Bram Buddingh
Sent: Monday, July 28, 2014 8:40 AM
To: Nuke Python discussion
Subject: Re: [Nuke-python] Running heavy code in separate thread with
progressbar
Ah! It looks like that is working…haha.
So, each time I run the code ‘nuke.executeInMainThreadWithResult’ Nuke is
starting a thread? I thought it only executes a piece of code in the main
thread and that you call a new threat with 'threading.Thread(None,
‘function').start()’.
Thanks!
Bram
On Jul 28, 2014, at 4:19 PM, Dan Rosen wrote:
Try the for loop inside the thread rather than a thread for each time it loops.
Maybe?
On Jul 28, 2014, at 5:57 AM, Bram Buddingh <[email protected]> wrote:
Hi everybody,
I am working on a python script that creates more than 25 read nodes with
approximately 30 timeOffset nodes connected to each of them. So I end up with a
script containing something like 1000 nodes. This could be extended later,
depending on the needs.
This is quite compute intensive to run. The main nuke thread/window freezes and
you don’t know how long you have to wait until it’s finished. I am trying to
put this in a separate thread with a status bar. The problem is that the
threaded way is even slower than without putting it in a separate thread. To
make it a bit clear, I wrote some python lines to demonstrate what I am trying
to do:
--------------------------------------------------------------------------------------------
import threading
### option 1: even slower than option 2 ###
def createBlurNodes():
task = nuke.ProgressTask("Create")
task.setMessage("Creating blur nodes")
for i in range(1000):
nuke.executeInMainThreadWithResult(nuke.createNode, args = ('Blur', '',
False))
task.setProgress(i/10)
threading.Thread(None, createBlurNodes).start()
### option 2: slow and I don't have visible feedback about the estimated
calculation time. Plus nuke is freezing for a couple of seconds, depending on
your machine specs. ###
for i in range(1000):
nuke.createNode('Blur', '', False)
--------------------------------------------------------------------------------------------
Maybe it’s slow because nuke.createNode is always running in the main thread?
Is this the correct way, or is there a better way to script this?
Thanks for the help in advance!
Bram Buddingh_______________________________________________
Nuke-python mailing list
[email protected], http://forums.thefoundry.co.uk/
http://support.thefoundry.co.uk/cgi-bin/mailman/listinfo/nuke-python
_______________________________________________
Nuke-python mailing list
[email protected], http://forums.thefoundry.co.uk/
http://support.thefoundry.co.uk/cgi-bin/mailman/listinfo/nuke-python
--------------------------------------------------------------------------------
_______________________________________________
Nuke-python mailing list
[email protected], http://forums.thefoundry.co.uk/
http://support.thefoundry.co.uk/cgi-bin/mailman/listinfo/nuke-python
--------------------------------------------------------------------------------
_______________________________________________
Nuke-python mailing list
[email protected], http://forums.thefoundry.co.uk/
http://support.thefoundry.co.uk/cgi-bin/mailman/listinfo/nuke-python
_______________________________________________
Nuke-python mailing list
[email protected], http://forums.thefoundry.co.uk/
http://support.thefoundry.co.uk/cgi-bin/mailman/listinfo/nuke-python