##// END OF EJS Templates
Store timestamps for modules to autoreload...
Store timestamps for modules to autoreload Closes gh-4127 At present, autoreload compares the timestamps on .py and .pyc files. However, this can fail in a couple of ways (see gh-4127). With this change, it caches the mtime of the .py file when we loaded it. Some extra complexity is needed to store the mtime as soon as possible - we scan sys.modules when autoreload is loaded, and register a post_execute hook to check for newly imported modules after each cell.

File last commit:

r11457:17a57099
r15682:3ec67fcd
Show More
manager.py
53 lines | 1.6 KiB | text/x-python | PythonLexer
""" Defines a KernelClient that provides signals and slots.
"""
from IPython.external.qt import QtCore
# Local imports
from IPython.utils.traitlets import Bool, DottedObjectName
from IPython.kernel import KernelManager
from IPython.kernel.restarter import KernelRestarter
from .kernel_mixins import QtKernelManagerMixin, QtKernelRestarterMixin
class QtKernelRestarter(KernelRestarter, QtKernelRestarterMixin):
def start(self):
if self._timer is None:
self._timer = QtCore.QTimer()
self._timer.timeout.connect(self.poll)
self._timer.start(self.time_to_dead * 1000)
def stop(self):
self._timer.stop()
def poll(self):
super(QtKernelRestarter, self).poll()
class QtKernelManager(KernelManager, QtKernelManagerMixin):
"""A KernelManager with Qt signals for restart"""
client_class = DottedObjectName('IPython.qt.client.QtKernelClient')
autorestart = Bool(True, config=True)
def start_restarter(self):
if self.autorestart and self.has_kernel:
if self._restarter is None:
self._restarter = QtKernelRestarter(
kernel_manager=self,
parent=self,
log=self.log,
)
self._restarter.add_callback(self._handle_kernel_restarted)
self._restarter.start()
def stop_restarter(self):
if self.autorestart:
if self._restarter is not None:
self._restarter.stop()
def _handle_kernel_restarted(self):
self.kernel_restarted.emit()