<br><br><div class="gmail_quote">On Fri, Aug 24, 2012 at 12:49 PM, Alejandro Weinstein <span dir="ltr">&lt;<a href="mailto:alejandro.weinstein@gmail.com" target="_blank">alejandro.weinstein@gmail.com</a>&gt;</span> wrote:<br>

<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Hi:<br>
<br>
If I call a function that take a while to return, say 5 seconds, the<br>
print commands in the qtconsole are delayed. Consider for instance the<br>
following code:<br>
<br>
#######################################################<br>
import numpy as np<br>
<br>
def slow_f():<br>
    &#39;&#39;&#39;A function that takes about 4 seconds to run.&#39;&#39;&#39;<br>
    N = 1200<br>
    A = np.random.rand(N, N)<br>
    return np.linalg.inv(A)<br>
<br>
print &#39;Calling slow_f for the first time&#39;<br>
B = slow_f()<br>
print &#39;Calling slow_f for the second time&#39;<br>
C = slow_f()<br>
print &#39;Calling slow_f for the third time&#39;<br>
D = slow_f()<br>
print &#39;Done&#39;<br>
#######################################################<br>
<br>
If I run this code in a standard IPython console (or just as $python<br>
ip.py), I get (the comments are to indicate the timing):<br>
<br>
In [2]: run ip.py<br>
Calling slow_f for the first time      # Wait ~4 seconds<br>
Calling slow_f for the second time # Wait ~4 seconds<br>
Calling slow_f for the third time    # Wait ~4 seconds<br>
Done<br>
<br>
However, if I run the same code in the qtconsole, the output is<br>
In [2]: run ip<br>
# No output for ~4 seconds<br>
Calling slow_f for the first time<br>
Calling slow_f for the second time # These two messages are printed<br>
together, then after 4 seconds<br>
Calling slow_f for the third time # Wait ~4 seconds<br>
Done<br>
<br>
Is this different behavior of the qtconsole expected? I&#39;m running the<br>
current master version of IPython (144f08a).<br></blockquote><div><br></div><div>It is expected, in that this is a known deficiency, but it is not exactly intended.</div><div><br></div><div>The difference is that terminal Python writes directly to the terminal, whereas the two-process Kernel doesn&#39;t write until &#39;stdout.flush&#39; is called.  There is an implicit flush if two prints are separated by at least [50ms](<a href="https://github.com/ipython/ipython/blob/master/IPython/zmq/iostream.py#L83">https://github.com/ipython/ipython/blob/master/IPython/zmq/iostream.py#L83</a>), but the way the logic is written the first print *never* implies a flush.  I would consider this a bug.</div>

<div><br></div><div>Can you try <a href="https://github.com/ipython/ipython/pull/2335">this branch</a>, which changes the logic a bit?</div><div><br></div><div>-MinRK</div><div><br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">


<br>
Alejandro.<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>
</blockquote></div><br>