title: Per-cell output for threaded IPython Notebooks
body: <p>I don't want to raise this as an issue, because it seems like a completely unreasonable feature request for what is a fairly amazing tool. But if any readers happen to be familiar with the architecture I'd be interested to know if a potential extension seems feasible.</p>
  
  <p>I recently wrote a notebook with some simple threaded code in it, just to see what would happen when I ran it. The notebook code (tl;dr it starts a number of parallel threads that print in a sleep loop) is available at <a href="https://gist.github.com/4562840">https://gist.github.com/4562840</a>.</p>
  
  <p>By hitting SHIFT-RETURN a few times as the code runs you can observe that any output from the kernel appears in the output area of the current cell, not that of the cell in which the code was run.</p>
  
  <p>I was wondering if it would be possible, if threads were active for a cell, to display a "refresh" button allowing the output area to be updated asynchronously. Ideally the refresh button would disappear if it was clicked after all threads had ended (after a final update).</p>
  
  <p>This would depend, though, on being able to identify and intercept the print output for each thread and direct it to a buffer for the specific cell's output. So, two questions.</p>
  
  <ol>
  <li><p>Am I correct in believing the the hard-wiring of Python 2's print statement means that
  this enhancement can not be implemented with a standard interpreter?</p></li>
  <li><p>Are the prospects for Python 3 any better, given that it's possible to sneak another
  layer into the print() stack inside the IPython kernel?and especially for those who didn't follow a Python link to get here,</p></li>
  <li><p>[nobody expects the Spanish Inquisition]
  More generally, can you point to (language-agnostic) examples
  of multiple streams being delivered into a page? Are there any established best practices
  for constructing and modifying the DOM to handle this?</p></li>
  </ol>