restarter.py
62 lines
| 1.9 KiB
| text/x-python
|
PythonLexer
Brian E. Granger
|
r10278 | """A basic in process kernel monitor with autorestarting. | ||
This watches a kernel's state using KernelManager.is_alive and auto | ||||
restarts the kernel if it dies. | ||||
""" | ||||
#----------------------------------------------------------------------------- | ||||
# 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 | ||||
#----------------------------------------------------------------------------- | ||||
Brian Granger
|
r10281 | from __future__ import absolute_import | ||
Brian E. Granger
|
r10278 | import zmq | ||
from zmq.eventloop import ioloop | ||||
MinRK
|
r10295 | from IPython.kernel.restarter import KernelRestarter | ||
Brian E. Granger
|
r10278 | from IPython.utils.traitlets import ( | ||
MinRK
|
r10295 | Instance, Float, List, | ||
Brian E. Granger
|
r10278 | ) | ||
#----------------------------------------------------------------------------- | ||||
# Code | ||||
#----------------------------------------------------------------------------- | ||||
MinRK
|
r10295 | class IOLoopKernelRestarter(KernelRestarter): | ||
Brian E. Granger
|
r10278 | """Monitor and autorestart a kernel.""" | ||
loop = Instance('zmq.eventloop.ioloop.IOLoop', allow_none=False) | ||||
def _loop_default(self): | ||||
return ioloop.IOLoop.instance() | ||||
time_to_dead = Float(3.0, config=True, | ||||
help="""Kernel heartbeat interval in seconds.""" | ||||
) | ||||
Brian Granger
|
r10280 | _pcallback = None | ||
Brian E. Granger
|
r10278 | def start(self): | ||
Brian Granger
|
r10280 | """Start the polling of the kernel.""" | ||
if self._pcallback is None: | ||||
self._pcallback = ioloop.PeriodicCallback( | ||||
MinRK
|
r10295 | self.poll, 1000*self.time_to_dead, self.loop | ||
Brian Granger
|
r10280 | ) | ||
self._pcallback.start() | ||||
def stop(self): | ||||
"""Stop the kernel polling.""" | ||||
if self._pcallback is not None: | ||||
self._pcallback.stop() | ||||
Brian E. Granger
|
r10278 | |||
Brian Granger
|
r10280 | def clear(self): | ||
"""Clear the underlying PeriodicCallback.""" | ||||
self.stop() | ||||
MinRK
|
r10295 | self._pcallback = None | ||