-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathrun.py
More file actions
67 lines (47 loc) · 1.58 KB
/
Copy pathrun.py
File metadata and controls
67 lines (47 loc) · 1.58 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
import argparse
import signal
import asyncio
from server import make_app
from server.src.utils.help import print_help, INTRO
from server.logger import logger
def parse_arguments():
"""Parses command-line arguments."""
parser = argparse.ArgumentParser(
description="Notebook-X: A lightweight Python notebook.",
add_help=False,
)
parser.add_argument(
"--help", "-h", action="store_true", help="Show this help message and exit."
)
args = parser.parse_args()
if args.help:
print_help()
exit(0)
return args
def shutdown(loop, kernel_manager):
"""Shutdown the server and all running kernels."""
logger.info("Shutting down Notebook X server...")
active_kernels = list(kernel_manager.kernels.keys())
for kernel_id in active_kernels:
logger.info(f"Shutting down kernel {kernel_id}")
kernel_manager.shutdown_kernel(kernel_id)
loop.stop()
def start_server():
"""Initializes and starts the Notebook-X server."""
app = make_app()
app.listen(8197)
logger.info("\n" + INTRO)
logger.info("Notebook-X is running at http://localhost:8197")
loop = asyncio.get_event_loop()
kernel_manager = app.settings["kernel_manager"]
signal.signal(signal.SIGINT, lambda sig, frame: shutdown(loop, kernel_manager))
signal.signal(signal.SIGTERM, lambda sig, frame: shutdown(loop, kernel_manager))
try:
loop.run_forever()
except KeyboardInterrupt:
shutdown(loop, kernel_manager)
def main():
parse_arguments()
start_server()
if __name__ == "__main__":
main()