|
|
"""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
|
|
|
|
|
|
import zmq
|
|
|
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', allow_none=False)
|
|
|
def _loop_default(self):
|
|
|
return ioloop.IOLoop.instance()
|
|
|
|
|
|
_restarter = Instance('IPython.kernel.ioloop.IOLoopKernelRestarter')
|
|
|
|
|
|
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)
|
|
|
|