It's peculiar - When I try it via a Task, it manages to cause a c-level error in Twisted on the engine, bringing down the entire process:<div><div>Fatal Python error: PyEval_RestoreThread: NULL tstate</div><div><br></div>
<div>Strangely, I can create, connect, and use the clients without issue when I use a MultiEngineClient.</div><div><br></div><div>I'm not sure why task submission would behave differently from execute. Â I'll have the think about this.<br clear="all">
<div><br></div>-MinRK<br>
<br><br><div class="gmail_quote">On Wed, Jan 19, 2011 at 15:34, Satrajit Ghosh <span dir="ltr"><<a href="mailto:satra@mit.edu">satra@mit.edu</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex;">
hi min,<br><br>i've run into a related problem. i'm trying to run code on an engine that can itself spawn new tasks, but i can't seem to execute function below on an engine. it just doesn't return if you call this through the taskclient in blocking mode. <br>
<br>it seems to block in the request for the task client and multiengine client.<br>
<br>cheers,<br><br>satra<br><br>-----<br>def get_ipy_clients():<br>Â Â Â """Get ipython clients<br><br>Â Â Â Returns client, taskclient and multiengineclient<br>Â Â Â """<br>Â Â Â ipyclient = None<br>
   taskclient = None<br>   mecclient = None<br>   try:<br>       name = 'IPython.kernel.client'<br>       __import__(name)<br>       ipyclient = sys.modules[name]<br>   except ImportError:<br>       warn("Ipython kernel not found. Parallel execution will be" \<br>
                "unavailable", ImportWarning)<br>   if ipyclient:<br>       try:<br>           taskclient = ipyclient.TaskClient()<br>           mecclient = ipyclient.MultiEngineClient()<br>       except Exception, e:<br>
           if isinstance(e, ConnectionRefusedError):<br>               warn("No clients found, running serially for now.")<br>           if isinstance(e, ValueError):<br>               warn("Ipython kernel not installed")<br>
   return ipyclient, taskclient, mecclient<br>------<br><br>
<br><br><div class="gmail_quote"><div class="im">On Wed, Jan 19, 2011 at 2:42 PM, MinRK <span dir="ltr"><<a href="mailto:benjaminrk@gmail.com" target="_blank">benjaminrk@gmail.com</a>></span> wrote:<br></div><div><div>
</div><div class="h5"><blockquote class="gmail_quote" style="margin:0pt 0pt 0pt 0.8ex;border-left:1px solid rgb(204, 204, 204);padding-left:1ex">
mec.queue_status() returns a list of the form:<div>[Â </div><div>Â Â (0, { 'pending' : "execute('a=5')", 'queue' : [ job1,job2,...] } ,</div><div>Â Â (1, {'pending' : 'None', 'queue' : [] },</div>
<div>Â Â ...</div><div>]<br><div><br></div><div>In this case, engine 1 is idle. Â I don't know why 1's pending is 'None' instead of None, that seems to be a bug.</div><div><br></div><div>So you can see the idle engines with something like:</div>
<div><div><br></div><div>def idle_engines(mec):</div><div>Â Â Â """return list of engine_ids corresponding to idle engines."""</div><div>Â Â Â qs = mec.queue_status()</div><div>Â Â Â engines = []</div>
<div>Â Â Â for e_id, status in qs:</div><div>Â Â Â Â Â if status['queue']:</div><div>Â Â Â Â Â Â Â continue</div><div>Â Â Â Â Â if not status['pending'] or status['pending'] == 'None':</div><div>Â Â Â Â Â Â Â engines.append(e_id)</div>
<div>Â Â Â return engines</div></div><div><br></div><div>Which would return a list of engine_ids that are idle, the length of which would of course be the number of idle engines.</div><div><br></div><div>-MinRK<br>
<br><br><div class="gmail_quote"><div><div></div><div>On Wed, Jan 19, 2011 at 10:39, Satrajit Ghosh <span dir="ltr"><<a href="mailto:satra@mit.edu" target="_blank">satra@mit.edu</a>></span> wrote:<br></div>
</div><blockquote class="gmail_quote" style="margin:0pt 0pt 0pt 0.8ex;border-left:1px solid rgb(204, 204, 204);padding-left:1ex"><div><div></div><div>
<div>hi brian and min,<br><br>i would like to do something like this:<br><br>if num_engines_available() > 2:<br>Â Â Â do_x<br>else: <br>Â Â Â do_y<br><br></div>in 0.10.1 series is there an easy way to query how many idle engines are available? <br>
<br clear="all">cheers,<br><br>satra<br><br>
<br></div></div>_______________________________________________<br>
IPython-dev mailing list<br>
<a href="mailto:IPython-dev@scipy.org" target="_blank">IPython-dev@scipy.org</a><br>
<a href="http://mail.scipy.org/mailman/listinfo/ipython-dev" target="_blank">http://mail.scipy.org/mailman/listinfo/ipython-dev</a><br>
<br></blockquote></div><br></div></div>
</blockquote></div></div></div><br>
</blockquote></div><br></div></div>