On Sun, Mar 14, 2010 at 2:58 PM, Jed Brown <jed at 59a2.org> wrote: > On Sun, 14 Mar 2010 14:50:40 -0500, Matthew Knepley <knepley at gmail.com> > wrote: > > On Sun, Mar 14, 2010 at 2:49 PM, Jed Brown <jed at 59a2.org> wrote: > > > > > On Sun, 14 Mar 2010 13:29:57 -0500, Matthew Knepley <knepley at gmail.com > > > > > wrote: > > > > Okay, whatever 'yuckiness' is here is imposed on us by the threading > > > > package. I think what is confusing you guys is the reprocessing of > > > > output, since Satish likes it cleaned up. The 'else' branch where > > > > Barry added code is actually the success branch since > thread.isAlive() > > > > is false, meaning it completed. We reprocess the output and > > > > return. The status and error have already been set during the run() > > > > call. Its this call that makes us us globals for these variables. Its > > > > the Python equiv of a closure. > > > > > > You can close over the present scope without using globals. As a crude > > > example, > > > > > > def foo(): x[:] = [4,5,6] # x = [4,5,6] would assign to a new local > > > x = [1,2] > > > foo() # same effect if you create and run a > thread > > > here > > > print x # [4,5,6] > > > > > > > That is what I thought, but it did not work until I made them global. > > You have to put them in a list/hash/etc. For example, if the x[:] is > just replaced with x, then it will create a new object. You have to > bind the variable from the enclosing scope.
Doesn't global do exactly this? Matt > > Jed -- What most experimenters take for granted before they begin their experiments is infinitely more interesting than any results to which their experiments lead. -- Norbert Wiener -------------- next part -------------- An HTML attachment was scrubbed... URL: <http://lists.mcs.anl.gov/pipermail/petsc-dev/attachments/20100314/b8de33cf/attachment.html>
