Thanks, Ean. I’ll be delving into threading some more. Lots to learn... Rich
Rich Bobo Senior VFX Compositor Armstrong White Email: [email protected] http://armstrong-white.com/ Email: [email protected] Mobile: (248) 840-2665 Web: http://richbobo.com/ "A professional is someone who can do his best work when he doesn't feel like it." - Alistair Cooke On Jul 28, 2014, at 5:39 PM, Ean Carr <[email protected]> wrote: > e.g. ... > > class MyClass(object): > def __init__(self): > self.progress = nuke.ProgressTask('progress') > self.progress.setProgress(100) > > P = MyClass() > > # Clean it up > del(P.progress) > > > On Mon, Jul 28, 2014 at 7:53 PM, Nathan Rusch <[email protected]> > wrote: > 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: [email protected] > http://armstrong-white.com/ > > Email: [email protected] > 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 <[email protected]> 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 <[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 > > > > _______________________________________________ > 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
