Hey Nathan,

...Just following the (mail)thread and I was wondering how to get the progress 
bar to close when the count finishes? I have tried a number of things and the 
progress bar remains on screen, either stuck at 99% or 100%, depending on what 
I do to check for the count to be finished. Is there a close method or 
something that needs to be done to make the window go away…?

Thanks,
Rich

Rich Bobo
Senior VFX Compositor
Armstrong White
Email:  rich.b...@armstrong-white.com
http://armstrong-white.com/

Email:  richb...@mac.com
Mobile:  (248) 840-2665
Web:  http://richbobo.com/

"The most beautiful thing we can experience is the mysterious. It is the source 
of all true art and science."
- Albert Einstein (1879 - 1955)





On Jul 28, 2014, at 2:07 PM, Nathan Rusch <nathan_ru...@hotmail.com> wrote:

> 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 <b...@postoffice.nl> 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
> Nuke-python@support.thefoundry.co.uk, http://forums.thefoundry.co.uk/
> http://support.thefoundry.co.uk/cgi-bin/mailman/listinfo/nuke-python
> _______________________________________________
> Nuke-python mailing list
> Nuke-python@support.thefoundry.co.uk, http://forums.thefoundry.co.uk/
> http://support.thefoundry.co.uk/cgi-bin/mailman/listinfo/nuke-python
>  
> 
> _______________________________________________
> Nuke-python mailing list
> Nuke-python@support.thefoundry.co.uk, http://forums.thefoundry.co.uk/
> http://support.thefoundry.co.uk/cgi-bin/mailman/listinfo/nuke-python
> 
> _______________________________________________
> Nuke-python mailing list
> Nuke-python@support.thefoundry.co.uk, http://forums.thefoundry.co.uk/
> http://support.thefoundry.co.uk/cgi-bin/mailman/listinfo/nuke-python
> _______________________________________________
> Nuke-python mailing list
> Nuke-python@support.thefoundry.co.uk, http://forums.thefoundry.co.uk/
> http://support.thefoundry.co.uk/cgi-bin/mailman/listinfo/nuke-python

_______________________________________________
Nuke-python mailing list
Nuke-python@support.thefoundry.co.uk, http://forums.thefoundry.co.uk/
http://support.thefoundry.co.uk/cgi-bin/mailman/listinfo/nuke-python

Reply via email to