<p dir="ltr"><br>
Hi,</p>
<p dir="ltr">On 12 Feb 2013 19:42, &quot;MinRK&quot; &lt;<a href="mailto:benjaminrk@gmail.com">benjaminrk@gmail.com</a>&gt; wrote:<br>
&gt;<br>
&gt;<br>
&gt;<br>
&gt; On Mon, Feb 11, 2013 at 9:33 AM, Moritz Emanuel Beber &lt;<a href="mailto:moritz.beber@gmail.com">moritz.beber@gmail.com</a>&gt; wrote:<br>
&gt;&gt;<br>
&gt;&gt; Dear all,<br>
&gt;&gt;<br>
&gt;&gt; I&#39;m trying to parallalize the computation of all pairwise inner products of the column vectors of a matrix. Unfortunately, I have some issues:<br>
&gt;&gt;<br>
&gt;&gt; Since I want to avoid passing the large matrix many times, I pushed the matrix to the engines, making it available to the namespace there. I can access that matrix as a global just fine using a function defined in the notebook, doing the same in a module fails... (Please have a look at the two attached files.)<br>

&gt;&gt;<br>
&gt;&gt; When I use an IPython.parallel.Reference to the global matrix and pass that to the function, that works in the external module. Of course, this means I have to pass a large list containing the reference to the map function.<br>

&gt;<br>
&gt;<br>
&gt; This is the most common confusion when working with IPython.parallel.<br>
&gt;<br>
&gt; The gist: interactively defined functions and objects are in the `__main__` module, so `globals()` in those scopes points to the same namespace.<br>
&gt; When you move something to a module, you change what `globals()` points to.  You can use the @interactive decorator (in IPython.parallel)<br>
&gt; to make functions defined in modules behave as if they were interactively defined (i.e. globals will be __main__ rather than the defining module).</p>
<p dir="ltr">Awesome, thank you for the explanation. I figured it must be a namespace issue since the variable wasn&#39;t in the globals but I didn&#39;t know about the solution.</p>
<p dir="ltr">&gt;<br>
&gt; So basically, in your code all you need to add is:<br>
&gt;<br>
&gt; from IPython.parallel import require, interactive<br>
&gt;<br>
&gt; @interactive<br>
&gt; @require(&quot;numpy&quot;)<br>
&gt; def parallel_inner(i, j):<br>
&gt;     ...<br>
&gt;<br>
&gt; Also note that to decorate with require, you need the `@`, which is missing in your code.</p>
<p dir="ltr">Oops :P</p>
<p dir="ltr">&gt;<br>
&gt; More detail here and here.<br>
&gt;</p>
<p dir="ltr">A great reminder to start checking SO for IPython questions more often.</p>
<p dir="ltr">&gt;  <br>
&gt;&gt;<br>
&gt;&gt;<br>
&gt;&gt; Insights and advice is appreciated,<br>
&gt;&gt; Moritz<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">http://mail.scipy.org/mailman/listinfo/ipython-user</a><br>
&gt;&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">http://mail.scipy.org/mailman/listinfo/ipython-user</a><br>
&gt;</p>
<p dir="ltr">Cheers,<br>
Moritz<br>
</p>