The progress bar will stay alive as long as there is a Python reference to it somewhere. It would be nice if the ProgressTask class had a method to close and clean it up, but in the interim, you just need to make sure that you're cleaning up references as necessary. You could also pass a weakref to the ProgressTask around (into nested functions, etc.), in which case you would just need to make sure the top-level code didn't clean it up too early.
-Nathan From: Richard Bobo Sent: Monday, July 28, 2014 11:16 AM To: Nuke Python discussion Subject: Re: [Nuke-python] Running heavy code in separatethread withprogressbar 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
_______________________________________________ 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