manager.py 1.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253
  1. """ Defines a KernelClient that provides signals and slots.
  2. """
  3. from qtpy import QtCore
  4. # Local imports
  5. from traitlets import Bool, DottedObjectName
  6. from jupyter_client import KernelManager
  7. from jupyter_client.restarter import KernelRestarter
  8. from .kernel_mixins import QtKernelManagerMixin, QtKernelRestarterMixin
  9. class QtKernelRestarter(KernelRestarter, QtKernelRestarterMixin):
  10. def start(self):
  11. if self._timer is None:
  12. self._timer = QtCore.QTimer()
  13. self._timer.timeout.connect(self.poll)
  14. self._timer.start(round(self.time_to_dead * 1000))
  15. def stop(self):
  16. self._timer.stop()
  17. def poll(self):
  18. super(QtKernelRestarter, self).poll()
  19. class QtKernelManager(KernelManager, QtKernelManagerMixin):
  20. """A KernelManager with Qt signals for restart"""
  21. client_class = DottedObjectName('qtconsole.client.QtKernelClient')
  22. autorestart = Bool(True, config=True)
  23. def start_restarter(self):
  24. if self.autorestart and self.has_kernel:
  25. if self._restarter is None:
  26. self._restarter = QtKernelRestarter(
  27. kernel_manager=self,
  28. parent=self,
  29. log=self.log,
  30. )
  31. self._restarter.add_callback(self._handle_kernel_restarted)
  32. self._restarter.start()
  33. def stop_restarter(self):
  34. if self.autorestart:
  35. if self._restarter is not None:
  36. self._restarter.stop()
  37. def _handle_kernel_restarted(self):
  38. self.kernel_restarted.emit()