Beispiel #1
0
    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")
Beispiel #2
0
    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")
Beispiel #3
0
    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()
Beispiel #4
0
    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()