-
Notifications
You must be signed in to change notification settings - Fork 283
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
A simple lead in to the 'kernel nanny' work, this adds a command so you can do: jupyter kernel --kernel python
- Loading branch information
Showing
3 changed files
with
72 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,66 @@ | ||
import os | ||
import signal | ||
import uuid | ||
|
||
from jupyter_core.application import JupyterApp | ||
from tornado.ioloop import IOLoop | ||
from traitlets import Unicode | ||
|
||
from . import __version__ | ||
from .kernelspec import KernelSpecManager | ||
from .manager import KernelManager | ||
|
||
class KernelApp(JupyterApp): | ||
version = __version__ | ||
description = "Run a kernel locally" | ||
|
||
classes = [KernelManager, KernelSpecManager] | ||
|
||
aliases = { | ||
'kernel': 'KernelApp.kernel_name', | ||
'ip': 'KernelManager.ip', | ||
} | ||
|
||
kernel_name = Unicode( | ||
help = 'The name of a kernel to start' | ||
).tag(config=True) | ||
|
||
def initialize(self, argv=None): | ||
super(KernelApp, self).initialize(argv) | ||
self.km = KernelManager(kernel_name=self.kernel_name, | ||
config=self.config) | ||
cf_basename = 'kernel-%s.json' % uuid.uuid4() | ||
self.km.connection_file = os.path.join(self.runtime_dir, cf_basename) | ||
self.loop = IOLoop.current() | ||
|
||
def setup_signals(self): | ||
if os.name == 'nt': | ||
return | ||
|
||
def shutdown_handler(signo, frame): | ||
self.loop.add_callback_from_signal(self.shutdown, signo) | ||
for sig in [signal.SIGTERM, signal.SIGINT]: | ||
signal.signal(sig, shutdown_handler) | ||
|
||
def shutdown(self, signo): | ||
self.log.info('Shutting down on signal %d' % signo) | ||
self.km.shutdown_kernel() | ||
self.loop.stop() | ||
|
||
def log_connection_info(self): | ||
cf = self.km.connection_file | ||
self.log.info('Connection file: %s', cf) | ||
self.log.info("To connect a client: --existing %s", os.path.basename(cf)) | ||
|
||
def start(self): | ||
self.log.info('Starting kernel %r', self.kernel_name) | ||
try: | ||
self.km.start_kernel() | ||
self.log_connection_info() | ||
self.setup_signals() | ||
self.loop.start() | ||
finally: | ||
self.km.cleanup() | ||
|
||
|
||
main = KernelApp.launch_instance |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,5 @@ | ||
#!/usr/bin/env python | ||
from jupyter_client.kernelapp import main | ||
|
||
if __name__ == '__main__': | ||
main() |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters