[IPython-dev] Macros don't work in threaded shells
Ville M. Vainio
vivainio at gmail.com
Mon Mar 10 14:53:08 EDT 2008
It appears recursive execution of _ip.runlines() is not possible with
threaded shells (and so e.g. macros hang ipython) - noticed this
through ticket #238, which is now a blocker.
Try:
ipython -q4thread
> _ip.runlines('1')
This will hang IPython.
First, we come to MTInteractiveShell.runsource(""" _ip.runlines('1')""")
This is given to runcode, which then does runsource( "1"). This never
gets to runcode, because the thread is waiting for _ip.runlines('1')
to complete.
According to this comment, it seems this scenario has been considered,
but the logic does not seem to work:
# Case 3
# Store code in queue, so the execution thread can handle it.
# Note that with macros and other applications, we MAY re-enter this
# section, so we have to acquire the lock with non-blocking semantics,
# else we deadlock.
got_lock = self.thread_ready.acquire()
self.code_queue.put(code)
if got_lock:
self.thread_ready.wait() # Wait until processed in timeout interval
else:
print "nolock",source
self.thread_ready.release()
(and no, using got_lock = self.thread_ready.acquire(blocking=False)
won't fix it).
Fernando? You remember whether this used to work?
--
Ville M. Vainio - vivainio.googlepages.com
blog=360.yahoo.com/villevainio - g[mail | talk]='vivainio'
More information about the IPython-dev
mailing list