On Sun, Mar 14, 2010 at 2:49 PM, Jed Brown <span dir="ltr"><<a href="mailto:jed@59a2.org">jed@59a2.org</a>></span> wrote:<br><div class="gmail_quote"><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex;">
<div class="im">On Sun, 14 Mar 2010 13:29:57 -0500, Matthew Knepley <<a href="mailto:knepley@gmail.com">knepley@gmail.com</a>> wrote:<br>
> Okay, whatever 'yuckiness' is here is imposed on us by the threading<br>
> package.  I think what is confusing you guys is the reprocessing of<br>
> output, since Satish likes it cleaned up. The 'else' branch where<br>
> Barry added code is actually the success branch since thread.isAlive()<br>
> is false, meaning it completed. We reprocess the output and<br>
> return. The status and error have already been set during the run()<br>
> call. Its this call that makes us us globals for these variables. Its<br>
> the Python equiv of a closure.<br>
<br>
</div>You can close over the present scope without using globals.  As a crude<br>
example,<br>
<br>
  def foo(): x[:] = [4,5,6]    # x = [4,5,6] would assign to a new local<br>
  x = [1,2]<br>
  foo()                        # same effect if you create and run a thread here<br>
  print x                      # [4,5,6]<br></blockquote><div><br></div><div>That is what I thought, but it did not work until I made them global.</div><div> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex;">

In the present context, this function is not returned so it is just<br>
downward funargs and can be done without proper closures.  If you use<br>
globals, you don't need anything resembling a closure, and indeed, the<br>
run() function in script.py bears no such resemblance.  There are<br>
several ways to make the 'x' within 'foo' come from the enclosing scope<br>
instead of the default which would make it a new local (I find Python<br>
scoping rules remarkably surprising).<br>
<br>
In conclusion, is there a reason why we are currently using globals<br>
*instead* of a closure?</blockquote><div><br></div><div>Try it without globals. It will not assign them. Not sure why.</div><div><br></div><div>   Matt</div><div> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex;">
<font color="#888888"><br>
Jed</font></blockquote></div>-- <br>What most experimenters take for granted before they begin their experiments is infinitely more interesting than any results to which their experiments lead.<br>-- Norbert Wiener<br>