<br><br><div class="gmail_quote">2012/10/25  <span dir="ltr">&lt;<a href="mailto:ipython-user-request@scipy.org" target="_blank">ipython-user-request@scipy.org</a>&gt;</span><br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
Send IPython-User mailing list submissions to<br>
        <a href="mailto:ipython-user@scipy.org">ipython-user@scipy.org</a><br>
<br>
To subscribe or unsubscribe via the World Wide Web, visit<br>
        <a href="http://mail.scipy.org/mailman/listinfo/ipython-user" target="_blank">http://mail.scipy.org/mailman/listinfo/ipython-user</a><br>
or, via email, send a message with subject or body &#39;help&#39; to<br>
        <a href="mailto:ipython-user-request@scipy.org">ipython-user-request@scipy.org</a><br>
<br>
You can reach the person managing the list at<br>
        <a href="mailto:ipython-user-owner@scipy.org">ipython-user-owner@scipy.org</a><br>
<br>
When replying, please edit your Subject line so it is more specific<br>
than &quot;Re: Contents of IPython-User digest...&quot;<br>
<br>
<br>
Today&#39;s Topics:<br>
<br>
   1. Re: questions about IPython.parallel (MinRK)<br>
   2. Re: questions about IPython.parallel (Francesco Montesano)<br>
   3. Re: questions about IPython.parallel (Min RK)<br>
   4. error of install ipython 0.10.0 (Jack Bryan)<br>
<br>
<br>
----------------------------------------------------------------------<br>
<br>
Message: 1<br>
Date: Wed, 24 Oct 2012 10:37:56 -0700<br>
From: MinRK &lt;<a href="mailto:benjaminrk@gmail.com">benjaminrk@gmail.com</a>&gt;<br>
Subject: Re: [IPython-User] questions about IPython.parallel<br>
To: &quot;Discussions about using IPython. <a href="http://ipython.org" target="_blank">http://ipython.org</a>&quot;<br>
        &lt;<a href="mailto:ipython-user@scipy.org">ipython-user@scipy.org</a>&gt;<br>
Message-ID:<br>
        &lt;<a href="mailto:CAHNn8BXZT4ZuyTEyDR1Jd9Tho9skOdhtNVjTaLmkEuxkzFNgUw@mail.gmail.com">CAHNn8BXZT4ZuyTEyDR1Jd9Tho9skOdhtNVjTaLmkEuxkzFNgUw@mail.gmail.com</a>&gt;<br>
Content-Type: text/plain; charset=&quot;utf-8&quot;<br>
<br>
On Wed, Oct 24, 2012 at 3:36 AM, Francesco Montesano &lt;<br>
<a href="mailto:franz.bergesund@gmail.com">franz.bergesund@gmail.com</a>&gt; wrote:<br>
<br>
&gt; Dear list,<br>
&gt;<br>
&gt; I have a bunch of coded designed to repeat the same operation over a<br>
&gt; (possibly large)<br>
&gt; number of file. So after discovering Ipython.parallel not long ago, I<br>
&gt; decided to<br>
&gt; rewrite to give me the possibility to use a task scheduler (I use<br>
&gt; load_balance_view) in order<br>
&gt; to make the best use possible of my quad core machines.<br>
&gt; Here is the typical structure of my code<br>
&gt;<br>
&gt; ###### BEGIN example.py ######<br>
&gt; #imports<br>
&gt;<br>
&gt; def command_line_parsing( ... ):<br>
&gt;    &quot;in my case argparse&quot;<br>
&gt;<br>
&gt; def do_some_operation( ... ):<br>
&gt;   &quot;executes some mathematical operation&quot;<br>
&gt;<br>
&gt; def read_operate_save_file( file, ... ):<br>
&gt;     &quot;&quot;&quot;reads the file, does operations and save to an output file&quot;&quot;&quot;<br>
&gt;     input = np.loadtxt( file )<br>
&gt; [1] do_some_operation(   )<br>
&gt;     np.savetxt( outfile, ..... )<br>
&gt;<br>
&gt; if __name__ == &quot;__main__&quot;:<br>
&gt;<br>
&gt;     args = command_line_parsing( )<br>
&gt;<br>
&gt;     #parallelisation can be can chosen or not<br>
&gt;     if args.parallel :<br>
&gt;         #checks that Ipython is there, that an ipcluster has been started<br>
&gt;         #initialises a Client and a load_balance_view. I can pass a string<br>
&gt; or<br>
&gt;         #list of strings to be executed on all engines (I use it to<br>
&gt; &quot;import xxx as x&quot; )<br>
&gt;         lview = IPp.start_load_balanced_view( to_execute )<br>
&gt;<br>
&gt;     if( args.parallel == False ):   #for serial computation<br>
&gt; [2]     for fn in args.ifname:  #file name loop<br>
&gt;             output = read_operate_save_file(fn, dis, **vars(args) )<br>
&gt;         else:   #I want parallel computation<br>
&gt; [3]         runs = [ lview.apply( read_operate_save_file,<br>
&gt; os.path.abspath(<a href="http://fn.name" target="_blank">fn.name</a>), ... ) for fn in args.ifname ]<br>
&gt;           results = [r.result for r in runs]<br>
&gt;<br>
&gt; ###### END example.py ######<br>
&gt;<br>
&gt; I have two questions:<br>
&gt; [1] In function &#39;read_operate_save_file&#39;, I call &#39;do_some_operation&#39;. When<br>
&gt; I<br>
&gt; work on serial mode, everything works fine, but in parallel mode I get<br>
&gt; the error<br>
&gt; &quot;IPython.parallel.error.RemoteError: NameError(global name<br>
&gt; &#39;do_some_operation&#39; is not defined)&quot;<br>
&gt; I&#39;m not surprised by this, as I imagine that each engine know only what<br>
&gt; has been<br>
&gt; executed or defined before and that lview.apply( func, ... ) just passes<br>
&gt; the<br>
&gt; &quot;func&quot; to the engines. A solution that I see is to run &quot;from example import<br>
&gt; do_some_operation&quot; on the engines when initialising the load_balance_view.<br>
&gt; Is<br>
&gt; there any easier/safer way?<br>
&gt;<br>
<br>
<br>
This namespace issue is common, and I have explanations scattered about the<br>
internet:<br>
<br>
<a href="http://stackoverflow.com/a/12307741/938949" target="_blank">http://stackoverflow.com/a/12307741/938949</a><br>
<a href="http://stackoverflow.com/a/10859394/938949" target="_blank">http://stackoverflow.com/a/10859394/938949</a><br>
<a href="https://github.com/ipython/ipython/issues/2489" target="_blank">https://github.com/ipython/ipython/issues/2489</a><br>
<a href="http://ipython.org/ipython-doc/dev/parallel/index.html" target="_blank">http://ipython.org/ipython-doc/dev/parallel/index.html</a><br>
<br>
Which I really need to consolidate into a single thorough explanation with<br>
examples.<br>
<br>
But the gist:<br>
<br>
- If a function is importable (e.g. in a module available both locally and<br>
remotely), then it&#39;s no problem<br>
- If it is defined in __main__ (e.g. in a script), then any references will<br>
be resolved in the *engine* namespace<br>
<br>
I recommend conforming to the first case if feasible, because then there<br>
should be no surprises.<br>
Everything surprising happens when you have depend on references in<br>
`__main__` or the current working dir (e.g. locally imported modules),<br>
since `__main__` is not the same on the various machines, nor is the<br>
working dir (necessarily).<br>
<br>
That said, if the names you need to resolve are few, a simple import/push<br>
step with a DirectView to set up namespaces should be all you need prior to<br>
submitting tasks (assuming new engines are not arriving in mid-computation).<br>
<br>
e.g.:<br>
<br>
rc = Client()<br>
dv = rc[:]<br>
# push any locally defined functions that your task function uses:<br>
dv[&#39;do_some_operation&#39;] = do_some_operation<br>
# perform any imports that are needed:<br>
dv.execute(&quot;import numpy as np...&quot;)<br>
# continue as before:<br>
lview = IPp.start_load_balanced_view( to_execute )<br>
...<br>
<br>
<br>
<br>
&gt;<br>
&gt; [2] Because of the way I parse my command line arguments, args.ifname its a<br>
&gt; list of already opened files. In serial mode, this is no problem, but when<br>
&gt; I<br>
&gt; assign the function to the scheduler passing the file, I get an error<br>
&gt; saying<br>
&gt; that the cannot work on a closed file. If I pass the file name with the<br>
&gt; absolute path, numpy can read it without problem. Is this a behaviour to be<br>
&gt; expected or a bug?<br>
&gt;<br>
<br>
I would expect a PickleError when you try to send an open file.  Definitely<br>
send filenames, not open file objects.<br>
<br>
<br>
&gt;<br>
&gt; Thanks for any help,<br>
&gt;<br>
&gt; Cheers,<br>
&gt; Francesco<br>
&gt; _______________________________________________<br>
&gt; IPython-User mailing list<br>
&gt; <a href="mailto:IPython-User@scipy.org">IPython-User@scipy.org</a><br>
&gt; <a href="http://mail.scipy.org/mailman/listinfo/ipython-user" target="_blank">http://mail.scipy.org/mailman/listinfo/ipython-user</a><br>
&gt;<br>
-------------- next part --------------<br>
An HTML attachment was scrubbed...<br>
URL: <a href="http://mail.scipy.org/pipermail/ipython-user/attachments/20121024/c5291b0c/attachment-0001.html" target="_blank">http://mail.scipy.org/pipermail/ipython-user/attachments/20121024/c5291b0c/attachment-0001.html</a><br>

<br>
------------------------------<br>
<br>
Message: 2<br>
Date: Wed, 24 Oct 2012 22:07:37 +0200<br>
From: Francesco Montesano &lt;<a href="mailto:franz.bergesund@gmail.com">franz.bergesund@gmail.com</a>&gt;<br>
Subject: Re: [IPython-User] questions about IPython.parallel<br>
To: &quot;Discussions about using IPython. <a href="http://ipython.org" target="_blank">http://ipython.org</a>&quot;<br>
        &lt;<a href="mailto:ipython-user@scipy.org">ipython-user@scipy.org</a>&gt;<br>
Message-ID:<br>
        &lt;<a href="mailto:CAOCdBK%2BypeqyWzzXFqC27Yqr56gahXQgTMQUw4rMyh0OLyvG5A@mail.gmail.com">CAOCdBK+ypeqyWzzXFqC27Yqr56gahXQgTMQUw4rMyh0OLyvG5A@mail.gmail.com</a>&gt;<br>
Content-Type: text/plain; charset=ISO-8859-1<br>
<br>
Hi Min,<br>
<br>
thanks for the answer<br>
<br>
2012/10/24 MinRK &lt;<a href="mailto:benjaminrk@gmail.com">benjaminrk@gmail.com</a>&gt;:<br>
&gt;<br>
&gt;<br>
&gt; On Wed, Oct 24, 2012 at 3:36 AM, Francesco Montesano<br>
&gt; &lt;<a href="mailto:franz.bergesund@gmail.com">franz.bergesund@gmail.com</a>&gt; wrote:<br>
&gt;&gt;<br>
&gt;&gt; Dear list,<br>
&gt;&gt;<br>
&gt;&gt; I have a bunch of coded designed to repeat the same operation over a<br>
&gt;&gt; (possibly large)<br>
&gt;&gt; number of file. So after discovering Ipython.parallel not long ago, I<br>
&gt;&gt; decided to<br>
&gt;&gt; rewrite to give me the possibility to use a task scheduler (I use<br>
&gt;&gt; load_balance_view) in order<br>
&gt;&gt; to make the best use possible of my quad core machines.<br>
&gt;&gt; Here is the typical structure of my code<br>
&gt;&gt;<br>
&gt;&gt; ###### BEGIN example.py ######<br>
&gt;&gt; #imports<br>
&gt;&gt;<br>
&gt;&gt; def command_line_parsing( ... ):<br>
&gt;&gt;    &quot;in my case argparse&quot;<br>
&gt;&gt;<br>
&gt;&gt; def do_some_operation( ... ):<br>
&gt;&gt;   &quot;executes some mathematical operation&quot;<br>
&gt;&gt;<br>
&gt;&gt; def read_operate_save_file( file, ... ):<br>
&gt;&gt;     &quot;&quot;&quot;reads the file, does operations and save to an output file&quot;&quot;&quot;<br>
&gt;&gt;     input = np.loadtxt( file )<br>
&gt;&gt; [1] do_some_operation(   )<br>
&gt;&gt;     np.savetxt( outfile, ..... )<br>
&gt;&gt;<br>
&gt;&gt; if __name__ == &quot;__main__&quot;:<br>
&gt;&gt;<br>
&gt;&gt;     args = command_line_parsing( )<br>
&gt;&gt;<br>
&gt;&gt;     #parallelisation can be can chosen or not<br>
&gt;&gt;     if args.parallel :<br>
&gt;&gt;         #checks that Ipython is there, that an ipcluster has been started<br>
&gt;&gt;         #initialises a Client and a load_balance_view. I can pass a string<br>
&gt;&gt; or<br>
&gt;&gt;         #list of strings to be executed on all engines (I use it to<br>
&gt;&gt; &quot;import xxx as x&quot; )<br>
&gt;&gt;         lview = IPp.start_load_balanced_view( to_execute )<br>
&gt;&gt;<br>
&gt;&gt;     if( args.parallel == False ):   #for serial computation<br>
&gt;&gt; [2]     for fn in args.ifname:  #file name loop<br>
&gt;&gt;             output = read_operate_save_file(fn, dis, **vars(args) )<br>
&gt;&gt;         else:   #I want parallel computation<br>
&gt;&gt; [3]         runs = [ lview.apply( read_operate_save_file,<br>
&gt;&gt; os.path.abspath(<a href="http://fn.name" target="_blank">fn.name</a>), ... ) for fn in args.ifname ]<br>
&gt;&gt;           results = [r.result for r in runs]<br>
&gt;&gt;<br>
&gt;&gt; ###### END example.py ######<br>
&gt;&gt;<br>
&gt;&gt; I have two questions:<br>
&gt;&gt; [1] In function &#39;read_operate_save_file&#39;, I call &#39;do_some_operation&#39;. When<br>
&gt;&gt; I<br>
&gt;&gt; work on serial mode, everything works fine, but in parallel mode I get<br>
&gt;&gt; the error<br>
&gt;&gt; &quot;IPython.parallel.error.RemoteError: NameError(global name<br>
&gt;&gt; &#39;do_some_operation&#39; is not defined)&quot;<br>
&gt;&gt; I&#39;m not surprised by this, as I imagine that each engine know only what<br>
&gt;&gt; has been<br>
&gt;&gt; executed or defined before and that lview.apply( func, ... ) just passes<br>
&gt;&gt; the<br>
&gt;&gt; &quot;func&quot; to the engines. A solution that I see is to run &quot;from example<br>
&gt;&gt; import<br>
&gt;&gt; do_some_operation&quot; on the engines when initialising the load_balance_view.<br>
&gt;&gt; Is<br>
&gt;&gt; there any easier/safer way?<br>
&gt;<br>
&gt;<br>
&gt;<br>
&gt; This namespace issue is common, and I have explanations scattered about the<br>
&gt; internet:<br>
&gt;<br>
&gt; <a href="http://stackoverflow.com/a/12307741/938949" target="_blank">http://stackoverflow.com/a/12307741/938949</a><br>
&gt; <a href="http://stackoverflow.com/a/10859394/938949" target="_blank">http://stackoverflow.com/a/10859394/938949</a><br>
&gt; <a href="https://github.com/ipython/ipython/issues/2489" target="_blank">https://github.com/ipython/ipython/issues/2489</a><br>
&gt; <a href="http://ipython.org/ipython-doc/dev/parallel/index.html" target="_blank">http://ipython.org/ipython-doc/dev/parallel/index.html</a><br>
&gt;<br>
&gt; Which I really need to consolidate into a single thorough explanation with<br>
&gt; examples.<br>
&gt;<br>
&gt; But the gist:<br>
&gt;<br>
&gt; - If a function is importable (e.g. in a module available both locally and<br>
&gt; remotely), then it&#39;s no problem<br>
&gt; - If it is defined in __main__ (e.g. in a script), then any references will<br>
&gt; be resolved in the *engine* namespace<br>
&gt;<br>
&gt; I recommend conforming to the first case if feasible, because then there<br>
&gt; should be no surprises.<br>
&gt; Everything surprising happens when you have depend on references in<br>
&gt; `__main__` or the current working dir (e.g. locally imported modules), since<br>
&gt; `__main__` is not the same on the various machines, nor is the working dir<br>
&gt; (necessarily).<br>
&gt;<br>
&gt; That said, if the names you need to resolve are few, a simple import/push<br>
&gt; step with a DirectView to set up namespaces should be all you need prior to<br>
&gt; submitting tasks (assuming new engines are not arriving in mid-computation).<br>
&gt;<br>
&gt; e.g.:<br>
&gt;<br>
&gt; rc = Client()<br>
&gt; dv = rc[:]<br>
&gt; # push any locally defined functions that your task function uses:<br>
&gt; dv[&#39;do_some_operation&#39;] = do_some_operation<br>
I ended up doing the following when initialising the load_balance_view<br>
dv.execute( &#39;import sys&#39; )<br>
dv.execute( &#39;sys.path.append(&quot;path_to_example.py&quot;)&#39; )<br>
dv.execute( &#39;from example import do_some_operation&#39; )<br>
Your suggestion looks much neater, just a couple of questions.<br>
With the push that you suggest, do I simply call the<br>
&#39;do_some_operation&#39; as in my example or do I need some different<br>
syntax?<br>
Do you think that one or the other way is more optimal when the<br>
function is called and executed?<br>
<br>
&gt; # perform any imports that are needed:<br>
&gt; dv.execute(&quot;import numpy as np...&quot;)<br>
&gt; # continue as before:<br>
&gt; lview = IPp.start_load_balanced_view( to_execute )<br>
&gt; ...<br>
&gt;<br>
&gt;<br>
&gt;&gt;<br>
&gt;&gt;<br>
&gt;&gt; [2] Because of the way I parse my command line arguments, args.ifname its<br>
&gt;&gt; a<br>
&gt;&gt; list of already opened files. In serial mode, this is no problem, but when<br>
&gt;&gt; I<br>
&gt;&gt; assign the function to the scheduler passing the file, I get an error<br>
&gt;&gt; saying<br>
&gt;&gt; that the cannot work on a closed file. If I pass the file name with the<br>
&gt;&gt; absolute path, numpy can read it without problem. Is this a behaviour to<br>
&gt;&gt; be<br>
&gt;&gt; expected or a bug?<br>
&gt;<br>
&gt;<br>
&gt; I would expect a PickleError when you try to send an open file.  Definitely<br>
&gt; send filenames, not open file objects.<br>
Just a curiosity: what is the working directory of the engines? Is the<br>
one where the ipcluster is started or where the profile is stored?<br>
(While fixing my code, I ended up passing the filename with the full path)<br>
<br>
Thanks again,<br>
<br>
Francesco<br>
<br>
&gt;<br>
&gt;&gt;<br>
&gt;&gt;<br>
&gt;&gt; Thanks for any help,<br>
&gt;&gt;<br>
&gt;&gt; Cheers,<br>
&gt;&gt; Francesco<br>
&gt;&gt; _______________________________________________<br>
&gt;&gt; IPython-User mailing list<br>
&gt;&gt; <a href="mailto:IPython-User@scipy.org">IPython-User@scipy.org</a><br>
&gt;&gt; <a href="http://mail.scipy.org/mailman/listinfo/ipython-user" target="_blank">http://mail.scipy.org/mailman/listinfo/ipython-user</a><br>
&gt;<br>
&gt;<br>
&gt;<br>
&gt; _______________________________________________<br>
&gt; IPython-User mailing list<br>
&gt; <a href="mailto:IPython-User@scipy.org">IPython-User@scipy.org</a><br>
&gt; <a href="http://mail.scipy.org/mailman/listinfo/ipython-user" target="_blank">http://mail.scipy.org/mailman/listinfo/ipython-user</a><br>
&gt;<br>
<br>
<br>
------------------------------<br>
<br>
Message: 3<br>
Date: Wed, 24 Oct 2012 13:51:22 -0700<br>
From: Min RK &lt;<a href="mailto:benjaminrk@gmail.com">benjaminrk@gmail.com</a>&gt;<br>
Subject: Re: [IPython-User] questions about IPython.parallel<br>
To: &quot;Discussions about using IPython. <a href="http://ipython.org" target="_blank">http://ipython.org</a>&quot;<br>
        &lt;<a href="mailto:ipython-user@scipy.org">ipython-user@scipy.org</a>&gt;<br>
Message-ID: &lt;<a href="mailto:CCF626CE-650C-4029-A7FA-B7DCDA8A6F30@gmail.com">CCF626CE-650C-4029-A7FA-B7DCDA8A6F30@gmail.com</a>&gt;<br>
Content-Type: text/plain;       charset=us-ascii<br>
<br>
<br>
<br>
On Oct 24, 2012, at 13:07, Francesco Montesano &lt;<a href="mailto:franz.bergesund@gmail.com">franz.bergesund@gmail.com</a>&gt; wrote:<br>
<br>
&gt; Hi Min,<br>
&gt;<br>
&gt; thanks for the answer<br>
&gt;<br>
&gt; 2012/10/24 MinRK &lt;<a href="mailto:benjaminrk@gmail.com">benjaminrk@gmail.com</a>&gt;:<br>
&gt;&gt;<br>
&gt;&gt;<br>
&gt;&gt; On Wed, Oct 24, 2012 at 3:36 AM, Francesco Montesano<br>
&gt;&gt; &lt;<a href="mailto:franz.bergesund@gmail.com">franz.bergesund@gmail.com</a>&gt; wrote:<br>
&gt;&gt;&gt;<br>
&gt;&gt;&gt; Dear list,<br>
&gt;&gt;&gt;<br>
&gt;&gt;&gt; I have a bunch of coded designed to repeat the same operation over a<br>
&gt;&gt;&gt; (possibly large)<br>
&gt;&gt;&gt; number of file. So after discovering Ipython.parallel not long ago, I<br>
&gt;&gt;&gt; decided to<br>
&gt;&gt;&gt; rewrite to give me the possibility to use a task scheduler (I use<br>
&gt;&gt;&gt; load_balance_view) in order<br>
&gt;&gt;&gt; to make the best use possible of my quad core machines.<br>
&gt;&gt;&gt; Here is the typical structure of my code<br>
&gt;&gt;&gt;<br>
&gt;&gt;&gt; ###### BEGIN example.py ######<br>
&gt;&gt;&gt; #imports<br>
&gt;&gt;&gt;<br>
&gt;&gt;&gt; def command_line_parsing( ... ):<br>
&gt;&gt;&gt;   &quot;in my case argparse&quot;<br>
&gt;&gt;&gt;<br>
&gt;&gt;&gt; def do_some_operation( ... ):<br>
&gt;&gt;&gt;  &quot;executes some mathematical operation&quot;<br>
&gt;&gt;&gt;<br>
&gt;&gt;&gt; def read_operate_save_file( file, ... ):<br>
&gt;&gt;&gt;    &quot;&quot;&quot;reads the file, does operations and save to an output file&quot;&quot;&quot;<br>
&gt;&gt;&gt;    input = np.loadtxt( file )<br>
&gt;&gt;&gt; [1] do_some_operation(   )<br>
&gt;&gt;&gt;    np.savetxt( outfile, ..... )<br>
&gt;&gt;&gt;<br>
&gt;&gt;&gt; if __name__ == &quot;__main__&quot;:<br>
&gt;&gt;&gt;<br>
&gt;&gt;&gt;    args = command_line_parsing( )<br>
&gt;&gt;&gt;<br>
&gt;&gt;&gt;    #parallelisation can be can chosen or not<br>
&gt;&gt;&gt;    if args.parallel :<br>
&gt;&gt;&gt;        #checks that Ipython is there, that an ipcluster has been started<br>
&gt;&gt;&gt;        #initialises a Client and a load_balance_view. I can pass a string<br>
&gt;&gt;&gt; or<br>
&gt;&gt;&gt;        #list of strings to be executed on all engines (I use it to<br>
&gt;&gt;&gt; &quot;import xxx as x&quot; )<br>
&gt;&gt;&gt;        lview = IPp.start_load_balanced_view( to_execute )<br>
&gt;&gt;&gt;<br>
&gt;&gt;&gt;    if( args.parallel == False ):   #for serial computation<br>
&gt;&gt;&gt; [2]     for fn in args.ifname:  #file name loop<br>
&gt;&gt;&gt;            output = read_operate_save_file(fn, dis, **vars(args) )<br>
&gt;&gt;&gt;        else:   #I want parallel computation<br>
&gt;&gt;&gt; [3]         runs = [ lview.apply( read_operate_save_file,<br>
&gt;&gt;&gt; os.path.abspath(<a href="http://fn.name" target="_blank">fn.name</a>), ... ) for fn in args.ifname ]<br>
&gt;&gt;&gt;          results = [r.result for r in runs]<br>
&gt;&gt;&gt;<br>
&gt;&gt;&gt; ###### END example.py ######<br>
&gt;&gt;&gt;<br>
&gt;&gt;&gt; I have two questions:<br>
&gt;&gt;&gt; [1] In function &#39;read_operate_save_file&#39;, I call &#39;do_some_operation&#39;. When<br>
&gt;&gt;&gt; I<br>
&gt;&gt;&gt; work on serial mode, everything works fine, but in parallel mode I get<br>
&gt;&gt;&gt; the error<br>
&gt;&gt;&gt; &quot;IPython.parallel.error.RemoteError: NameError(global name<br>
&gt;&gt;&gt; &#39;do_some_operation&#39; is not defined)&quot;<br>
&gt;&gt;&gt; I&#39;m not surprised by this, as I imagine that each engine know only what<br>
&gt;&gt;&gt; has been<br>
&gt;&gt;&gt; executed or defined before and that lview.apply( func, ... ) just passes<br>
&gt;&gt;&gt; the<br>
&gt;&gt;&gt; &quot;func&quot; to the engines. A solution that I see is to run &quot;from example<br>
&gt;&gt;&gt; import<br>
&gt;&gt;&gt; do_some_operation&quot; on the engines when initialising the load_balance_view.<br>
&gt;&gt;&gt; Is<br>
&gt;&gt;&gt; there any easier/safer way?<br>
&gt;&gt;<br>
&gt;&gt;<br>
&gt;&gt;<br>
&gt;&gt; This namespace issue is common, and I have explanations scattered about the<br>
&gt;&gt; internet:<br>
&gt;&gt;<br>
&gt;&gt; <a href="http://stackoverflow.com/a/12307741/938949" target="_blank">http://stackoverflow.com/a/12307741/938949</a><br>
&gt;&gt; <a href="http://stackoverflow.com/a/10859394/938949" target="_blank">http://stackoverflow.com/a/10859394/938949</a><br>
&gt;&gt; <a href="https://github.com/ipython/ipython/issues/2489" target="_blank">https://github.com/ipython/ipython/issues/2489</a><br>
&gt;&gt; <a href="http://ipython.org/ipython-doc/dev/parallel/index.html" target="_blank">http://ipython.org/ipython-doc/dev/parallel/index.html</a><br>
&gt;&gt;<br>
&gt;&gt; Which I really need to consolidate into a single thorough explanation with<br>
&gt;&gt; examples.<br>
&gt;&gt;<br>
&gt;&gt; But the gist:<br>
&gt;&gt;<br>
&gt;&gt; - If a function is importable (e.g. in a module available both locally and<br>
&gt;&gt; remotely), then it&#39;s no problem<br>
&gt;&gt; - If it is defined in __main__ (e.g. in a script), then any references will<br>
&gt;&gt; be resolved in the *engine* namespace<br>
&gt;&gt;<br>
&gt;&gt; I recommend conforming to the first case if feasible, because then there<br>
&gt;&gt; should be no surprises.<br>
&gt;&gt; Everything surprising happens when you have depend on references in<br>
&gt;&gt; `__main__` or the current working dir (e.g. locally imported modules), since<br>
&gt;&gt; `__main__` is not the same on the various machines, nor is the working dir<br>
&gt;&gt; (necessarily).<br>
&gt;&gt;<br>
&gt;&gt; That said, if the names you need to resolve are few, a simple import/push<br>
&gt;&gt; step with a DirectView to set up namespaces should be all you need prior to<br>
&gt;&gt; submitting tasks (assuming new engines are not arriving in mid-computation).<br>
&gt;&gt;<br>
&gt;&gt; e.g.:<br>
&gt;&gt;<br>
&gt;&gt; rc = Client()<br>
&gt;&gt; dv = rc[:]<br>
&gt;&gt; # push any locally defined functions that your task function uses:<br>
&gt;&gt; dv[&#39;do_some_operation&#39;] = do_some_operation<br>
&gt; I ended up doing the following when initialising the load_balance_view<br>
&gt; dv.execute( &#39;import sys&#39; )<br>
&gt; dv.execute( &#39;sys.path.append(&quot;path_to_example.py&quot;)&#39; )<br>
&gt; dv.execute( &#39;from example import do_some_operation&#39; )<br>
&gt; Your suggestion looks much neater, just a couple of questions.<br>
&gt; With the push that you suggest, do I simply call the<br>
&gt; &#39;do_some_operation&#39; as in my example or do I need some different<br>
&gt; syntax?<br>
&gt; Do you think that one or the other way is more optimal when the<br>
&gt; function is called and executed?<br>
&gt;<br>
&gt;&gt; # perform any imports that are needed:<br>
&gt;&gt; dv.execute(&quot;import numpy as np...&quot;)<br>
&gt;&gt; # continue as before:<br>
&gt;&gt; lview = IPp.start_load_balanced_view( to_execute )<br>
&gt;&gt; ...<br>
&gt;&gt;<br>
&gt;&gt;<br>
&gt;&gt;&gt;<br>
&gt;&gt;&gt;<br>
&gt;&gt;&gt; [2] Because of the way I parse my command line arguments, args.ifname its<br>
&gt;&gt;&gt; a<br>
&gt;&gt;&gt; list of already opened files. In serial mode, this is no problem, but when<br>
&gt;&gt;&gt; I<br>
&gt;&gt;&gt; assign the function to the scheduler passing the file, I get an error<br>
&gt;&gt;&gt; saying<br>
&gt;&gt;&gt; that the cannot work on a closed file. If I pass the file name with the<br>
&gt;&gt;&gt; absolute path, numpy can read it without problem. Is this a behaviour to<br>
&gt;&gt;&gt; be<br>
&gt;&gt;&gt; expected or a bug?<br>
&gt;&gt;<br>
&gt;&gt;<br>
&gt;&gt; I would expect a PickleError when you try to send an open file.  Definitely<br>
&gt;&gt; send filenames, not open file objects.<br>
&gt; Just a curiosity: what is the working directory of the engines? Is the<br>
&gt; one where the ipcluster is started or where the profile is stored?<br>
&gt; (While fixing my code, I ended up passing the filename with the full path)<br>
<br>
It depends on configuration and how you start the engines.  You can set this with your config files (look for work_dir), and you can view the current working dir with:<br>
<br>
rc[:].apply_sync(os.getcwdu)<br>
<br>
&gt;<br>
&gt; Thanks again,<br>
&gt;<br>
&gt; Francesco<br>
&gt;<br>
&gt;&gt;<br>
&gt;&gt;&gt;<br>
&gt;&gt;&gt;<br>
&gt;&gt;&gt; Thanks for any help,<br>
&gt;&gt;&gt;<br>
&gt;&gt;&gt; Cheers,<br>
&gt;&gt;&gt; Francesco<br>
&gt;&gt;&gt; _______________________________________________<br>
&gt;&gt;&gt; IPython-User mailing list<br>
&gt;&gt;&gt; <a href="mailto:IPython-User@scipy.org">IPython-User@scipy.org</a><br>
&gt;&gt;&gt; <a href="http://mail.scipy.org/mailman/listinfo/ipython-user" target="_blank">http://mail.scipy.org/mailman/listinfo/ipython-user</a><br>
&gt;&gt;<br>
&gt;&gt;<br>
&gt;&gt;<br>
&gt;&gt; _______________________________________________<br>
&gt;&gt; IPython-User mailing list<br>
&gt;&gt; <a href="mailto:IPython-User@scipy.org">IPython-User@scipy.org</a><br>
&gt;&gt; <a href="http://mail.scipy.org/mailman/listinfo/ipython-user" target="_blank">http://mail.scipy.org/mailman/listinfo/ipython-user</a><br>
&gt; _______________________________________________<br>
&gt; IPython-User mailing list<br>
&gt; <a href="mailto:IPython-User@scipy.org">IPython-User@scipy.org</a><br>
&gt; <a href="http://mail.scipy.org/mailman/listinfo/ipython-user" target="_blank">http://mail.scipy.org/mailman/listinfo/ipython-user</a><br>
<br>
<br>
------------------------------<br>
<br>
Message: 4<br>
Date: Wed, 24 Oct 2012 19:52:01 -0600<br>
From: Jack Bryan &lt;<a href="mailto:dtustudy68@hotmail.com">dtustudy68@hotmail.com</a>&gt;<br>
Subject: [IPython-User] error of install ipython 0.10.0<br>
To: &lt;<a href="mailto:ipython-user@scipy.org">ipython-user@scipy.org</a>&gt;<br>
Message-ID: &lt;BLU154-W3ED81D8D80D5A75D5A862CB7F0@phx.gbl&gt;<br>
Content-Type: text/plain; charset=&quot;iso-8859-1&quot;<br>
<br>
<br>
Hi,<br>
I am trying to install ipython 0.10.0  on Linux Red Hat 4.4.4-17.<br>
I use instructions on:<br>
$ tar -xzf ipython.tar.gz<br>
$ cd ipython<br>
$ python setup.py installhttp://<a href="http://ipython.org/ipython-doc/stable/install/install.html" target="_blank">ipython.org/ipython-doc/stable/install/install.html</a><br>
but, I got:<br>
import pkg_resources        Zope.Interface: yes               Twisted: Not found (required for parallel computing                        capabilities)              Foolscap: Not found (required for parallel computing                        capabilities)               OpenSSL: 0.10                sphinx: Not found (required for building documentation)              pygments: Not found (required for syntax highlighting                        documentation)                  nose: Not found (required for running the test suite)               pexpect: no (required for running standalone doctests)running installrunning buildrunning build_pyrunning build_scriptsrunning install_librunning install_scriptschanging mode of /home/user/usr/bin/ipengine to 755changing mode of /home/user/usr/bin/ipcontroller to 755changing mode of /home/user/usr/bin/ipcluster to 755changing mode of /home/user/usr/bin/ipython to 755changing mode of /home/user/usr/bin/ipythonx to 755changing mode of /home/user<br>

 /usr/bin/ipython-wx to 755changing mode of /home/user/usr/bin/pycolor to 755changing mode of /home/user/usr/bin/irunner to 755changing mode of /home/user/usr/bin/iptest to 755running install_datarunning install_egg_infoRemoving /home/user/usr/lib/python2.6/site-packages/ipython-0.10.1-py2.6.egg-infoWriting /home/user/usr/lib/python2.6/site-packages/ipython-0.10.1-py2.6.egg-info<br>

I have used easy_install  to install nose, sphinx, pexpect, pygments.<br>
Why do I still have this error ?<br>
Thanks<br>
<br>
<br>
-------------- next part --------------<br>
An HTML attachment was scrubbed...<br>
URL: <a href="http://mail.scipy.org/pipermail/ipython-user/attachments/20121024/82c1e0e8/attachment.html" target="_blank">http://mail.scipy.org/pipermail/ipython-user/attachments/20121024/82c1e0e8/attachment.html</a><br>

<br>
------------------------------<br>
<br>
_______________________________________________<br>
IPython-User mailing list<br>
<a href="mailto:IPython-User@scipy.org">IPython-User@scipy.org</a><br>
<a href="http://mail.scipy.org/mailman/listinfo/ipython-user" target="_blank">http://mail.scipy.org/mailman/listinfo/ipython-user</a><br>
<br>
<br>
End of IPython-User Digest, Vol 108, Issue 29<br>
*********************************************<br>
</blockquote></div><br>