restarter.py
54 lines
| 1.7 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 | from zmq.eventloop import ioloop | ||
MinRK
|
r10295 | from IPython.kernel.restarter import KernelRestarter | ||
Brian E. Granger
|
r10278 | from IPython.utils.traitlets import ( | ||
Thomas Kluyver
|
r11130 | Instance, | ||
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() | ||||
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 | ) | ||
MinRK
|
r10320 | self._pcallback.start() | ||
Brian Granger
|
r10280 | |||
def stop(self): | ||||
"""Stop the kernel polling.""" | ||||
if self._pcallback is not None: | ||||
self._pcallback.stop() | ||||
MinRK
|
r10320 | self._pcallback = None | ||
Brian E. Granger
|
r10278 | |||