def run(self): global logger logger = log.kernel_logger.getChild(str(os.getpid())) logger.debug("forked kernel is running") log.std_redirect(logger) # Become a group leader for cleaner exit. os.setpgrp() dir = os.path.join(self.dir, self.id) try: os.mkdir(dir) except OSError as e: if e.errno != errno.EEXIST: raise os.chdir(dir) #config = traitlets.config.loader.Config({"ip": self.ip}) #config.HistoryManager.enabled = False app = IPKernelApp.instance(log=logger) from namespace import InstrumentedNamespace app.user_ns = InstrumentedNamespace() app.initialize([]) # Redirects stdout/stderr #log.std_redirect(logger) # Uncomment for debugging # This function should be called via atexit, but it isn't, perhaps due # to forking. Stale connection files do cause problems. app.cleanup_connection_file() kernel_init.initialize(app.kernel) for r, limit in self.rlimits.iteritems(): resource.setrlimit(getattr(resource, r), (limit, limit)) logger.debug("kernel ready") context = zmq.Context.instance() socket = context.socket(zmq.PUSH) socket.connect("tcp://localhost:{}".format(self.waiter_port)) socket.send_json({ "id": self.id, "connection": { "key": app.session.key, "ip": app.ip, "hb": app.hb_port, "iopub": app.iopub_port, "shell": app.shell_port, }, "rlimits": self.rlimits, }) def signal_handler(signum, frame): logger.info("received %s, shutting down", signum) # TODO: this may not be the best way to do it. app.kernel.do_shutdown(False) signal.signal(signal.SIGTERM, signal_handler) app.start() logger.debug("Kernel.run finished")
try: sage.all.plot(1, (0, 1)) except Exception: logger.exception("plotting exception") if __name__ == "__main__": parser = argparse.ArgumentParser( description="Launch a kernel provider for SageMathCell") parser.add_argument("--address", help="address of the kernel dealer (defaults to $SSH_CLIENT)") parser.add_argument("port", type=int, help="port of the kernel dealer") parser.add_argument("dir", help="directory name for user files saved by kernels") args = parser.parse_args() log.std_redirect(logger) address = args.address or os.environ["SSH_CLIENT"].split()[0] if ":" in address: address = "[{}]".format(address) address = "tcp://{}:{}".format(address, args.port) provider = KernelProvider(address, args.dir) def signal_handler(signum, frame): logger.info("received %s, shutting down", signum) provider.stop() signal.signal(signal.SIGTERM, signal_handler) provider.start()
try: sage.all.plot(1, (0, 1)) except Exception: logger.exception("plotting exception") if __name__ == "__main__": parser = argparse.ArgumentParser( description="Launch a kernel provider for SageMathCell") parser.add_argument( "--address", help="address of the kernel dealer (defaults to $SSH_CLIENT)") parser.add_argument("port", type=int, help="port of the kernel dealer") parser.add_argument("dir", help="directory name for user files saved by kernels") args = parser.parse_args() log.std_redirect(logger) address = args.address or os.environ["SSH_CLIENT"].split()[0] if ":" in address: address = "[{}]".format(address) address = "tcp://{}:{}".format(address, args.port) provider = KernelProvider(address, args.dir) def signal_handler(signum, frame): logger.info("received %s, shutting down", signum) provider.stop() signal.signal(signal.SIGTERM, signal_handler) provider.start()