<br><br><div class="gmail_quote">2010/7/24 Fernando Perez <span dir="ltr">&lt;<a href="http://fperez.net">fperez.net</a>@<a href="http://gmail.com">gmail.com</a>&gt;</span><br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex;">
Hi Omar,<br>
<br>
2010/7/24 Omar Andrés Zapata Mesa &lt;<a href="mailto:andresete.chaos@gmail.com">andresete.chaos@gmail.com</a>&gt;:<br>
&gt; .<br>
&gt; Let&#39;s suppose the following code in the prompt:<br>
&gt; In [1]: for i in range(100000):<br>
&gt;    ...:     print i<br>
&gt;    ...:<br>
&gt; This will take a lot of time to run, and if the user wants to stop the<br>
&gt; process he will normally do it with ctrl+c.<br>
&gt; by capturing KeyboardInterrupt i was experimenting with a message sent to<br>
&gt; the kernel to stop such process, but the kernel hangs until the &quot;for&quot;<br>
&gt; process is over.<br>
&gt; The solution I see is to run the kernel processes on a thread. what do you<br>
&gt; think?<br>
<br>
No, the kernel will be in a separate process, and what needs to be done is:<br>
<br>
1. capture Ctrl-C in the frontend side with the usual try/except.<br>
<br>
2. Send the Ctrl-C as a signal to the kernel process.<br>
<br></blockquote><div><br></div><div>I think it is a little dangerous to forward Ctrl-C.  When there are two processes like this I think it is very ambiguous as to what it means.  I would rather go with a frontend magic:</div>
<div><br></div><div>:kernel 0 kill</div><div> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex;">
In order to do this, you&#39;ll  need to know the PID of the kernel<br>
process, but Evan has already been making progress in this direction<br>
so you can benefit from his work.  This code:<br>
<br>
<a href="http://github.com/epatters/ipython/blob/qtfrontend/IPython/zmq/kernel.py#L316" target="_blank">http://github.com/epatters/ipython/blob/qtfrontend/IPython/zmq/kernel.py#L316</a><br>
<br>
already has a kernel launcher prototype with the necessary PID information.<br>
<br></blockquote><div><br></div><div>Let&#39;s start to use the Popen interface of Python 2.6.  It has a terminate and kill method that gets around the PID stuf in a cross platform manner.</div><div> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex;">

To send the signal, you can use os.kill  for now.  This has problems<br>
on Windows, but let&#39;s get signal handling working on *nix first and<br>
once things are in place nicely, we&#39;ll look into more general options.<br>
<br>
&gt; And another question:<br>
&gt; What magi commands do you think ipython-zmq should have?<br>
<br>
For now don&#39;t worry about magics, as they should all happen<br>
kernel-wise for you.  I&#39;ll send an email regarding some ideas about<br>
magics separately shortly.<br>
<br>
Cheers,<br>
<br>
f<br>
_______________________________________________<br>
IPython-dev mailing list<br>
<a href="mailto:IPython-dev@scipy.org">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>
</blockquote></div><br><br clear="all"><br>-- <br>Brian E. Granger, Ph.D.<br>Assistant Professor of Physics<br>Cal Poly State University, San Luis Obispo<br><a href="mailto:bgranger@calpoly.edu">bgranger@calpoly.edu</a><br>
<a href="mailto:ellisonbg@gmail.com">ellisonbg@gmail.com</a><br>