<div dir="ltr">Hello, I think I need a post_runcode_hook in interactive python module &#39;iplib&#39;.<br><br>My use case is the following.&nbsp; I have a real time visualizer for a simulation system, but I would like to allow IPython commands while the simulator is running.&nbsp; The simulator runs in a different thread.&nbsp; I would like to automatically acquire the lock protecting the simulator system around IPython commands, or else the user may forget to pause the simulation first and may cause threading problems (the simulator is not multi-threaded).<br>
<br>I see the new IPython 0.9 has a pre_runcode_hook. <br><br>&nbsp;&nbsp;&nbsp; def runcode(self,code_obj):<br>[...]<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; try:<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; self.hooks.pre_runcode_hook()<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; exec code_obj in self.user_global_ns, self.user_ns<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; finally:<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; # Reset our crash handler in place<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; sys.excepthook = old_excepthook<br><br>I would like a post_run_hook as well:<br><br>&nbsp;&nbsp;&nbsp; def runcode(self,code_obj):<br>
[...]<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; try:<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; self.hooks.pre_runcode_hook() #&nbsp; my hook whould do: simulation.lock.acquire()<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; exec code_obj in self.user_global_ns, self.user_ns<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; finally:<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; # Reset our crash handler in place<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; sys.excepthook = old_excepthook<br>

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; self.hooks.post_runcode_hook() #&nbsp; my hook whould do: simulation.lock.release()<br>

<br>I think I&#39;ll try monkey-patching for now, also because I still have 0.8.4 in Ubuntu, but if some caring IPython developer would like to add the missing hook then I might be able to drop my hack in a couple of years.. ;-)<br>
<br>Keep up the good work, and best regards.<br clear="all"><br>-- <br>Gustavo J. A. M. Carneiro<br>INESC Porto, Telecommunications and Multimedia Unit<br>&quot;The universe is always one step beyond logic.&quot; -- Frank Herbert<br>

</div>