This is an issue with the way instances are pickled - they only get a reference to their class (in this case __main__.MyModel),<div>so this class must be defined on the engines prior to the task running.  Now, the obvious answer is to `push(MyModel=MyModel)` to your engines, prior to calling apply, but if you are using 0.13, you will find that this does not work (classes are pushable in master).</div>

<div><br></div><div>The gist:</div><div><br></div><div>- In 0.13.1 you must define the classes locally *and* remotely</div><div>- In master, this is easier, and you can just push classes like you would with a function</div>

<div>- There&#39;s a PR that eliminates even the two-step process with the @require decorator</div><div><br></div><div>All of these in action:</div><div><br></div><div><a href="http://nbviewer.ipython.org/5216756">http://nbviewer.ipython.org/5216756</a></div>

<div><br></div><div>-MinRK</div><div><br></div><div><br><div class="gmail_quote">On Thu, Mar 21, 2013 at 11:13 AM, Jacob Vanderplas <span dir="ltr">&lt;<a href="mailto:jakevdp@cs.washington.edu" target="_blank">jakevdp@cs.washington.edu</a>&gt;</span> wrote:<br>

<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr">Hi,<div>I&#39;m having an issue trying to execute a function in parallel which references a class object.  Here&#39;s a minimal snippet:</div>

<div><br></div><div>#------------------------------------------------</div>
<div><div>from IPython.parallel import Client</div><div>client = Client()</div><div>lbv = client.load_balanced_view()</div><div><br></div><div># the real model object is much more involved...</div><div>class MyModel(object):</div>


<div>    def maximize(self, r):</div><div>        return max(r, 4)</div><div><br></div><div>def evaluate(r, model):</div><div>    return model.maximize(r)</div><div><br></div><div>model = MyModel()</div><div>print lbv.apply(evaluate, 2, model).get()</div>


<div>#-----------------------------------------------</div><div><br></div><div>when I run this, I get the following error:</div><div><br></div><div>IPython.parallel.error.RemoteError: AttributeError(&#39;DummyMod&#39; object has no attribute &#39;MyModel&#39;)<br>


</div><div><br></div><div>I&#39;ve found that I can get around this by moving the definition of MyModel to a separate .py file, and importing it from there rather than defining it in-place.  Is this generally the case in IPython parallel that objects defined within the script cannot be used in parallel execution?  Is there a way to get around this without using separate files?</div>


<div><br></div><div>Thanks,</div><div>   Jake</div><div><br></div><div><br></div></div><div><br></div><div><br></div></div>
<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></blockquote></div><br></div>