"""A kernel manager with a tornado IOLoop""" #----------------------------------------------------------------------------- # Copyright (C) 2013 The IPython Development Team # # Distributed under the terms of the BSD License. The full license is in # the file COPYING, distributed as part of this software. #----------------------------------------------------------------------------- #----------------------------------------------------------------------------- # Imports #----------------------------------------------------------------------------- from __future__ import absolute_import from zmq.eventloop import ioloop from zmq.eventloop.zmqstream import ZMQStream from IPython.utils.traitlets import ( Instance ) from IPython.kernel.manager import KernelManager from .restarter import IOLoopKernelRestarter #----------------------------------------------------------------------------- # Code #----------------------------------------------------------------------------- def as_zmqstream(f): def wrapped(self, *args, **kwargs): socket = f(self, *args, **kwargs) return ZMQStream(socket, self.loop) return wrapped class IOLoopKernelManager(KernelManager): loop = Instance('zmq.eventloop.ioloop.IOLoop') def _loop_default(self): return ioloop.IOLoop.instance() _restarter = Instance('IPython.kernel.ioloop.IOLoopKernelRestarter', allow_none=True) def start_restarter(self): if self.autorestart and self.has_kernel: if self._restarter is None: self._restarter = IOLoopKernelRestarter( kernel_manager=self, loop=self.loop, parent=self, log=self.log ) self._restarter.start() def stop_restarter(self): if self.autorestart: if self._restarter is not None: self._restarter.stop() connect_shell = as_zmqstream(KernelManager.connect_shell) connect_iopub = as_zmqstream(KernelManager.connect_iopub) connect_stdin = as_zmqstream(KernelManager.connect_stdin) connect_hb = as_zmqstream(KernelManager.connect_hb)