mirror of
https://github.com/clearml/clearml
synced 2025-03-03 10:42:00 +00:00
Add Jupyter notebook server execution example
This commit is contained in:
parent
b7358d7fef
commit
ef73bc258f
57
examples/execute_jupyter_notebook_server.py
Normal file
57
examples/execute_jupyter_notebook_server.py
Normal file
@ -0,0 +1,57 @@
|
||||
import os
|
||||
import sys
|
||||
import subprocess
|
||||
from copy import deepcopy
|
||||
import socket
|
||||
from tempfile import mkstemp
|
||||
import jupyter
|
||||
from trains import Task
|
||||
|
||||
|
||||
# initialize TRAINS
|
||||
task = Task.init(project_name='examples', task_name='Remote Jupyter NoteBook')
|
||||
|
||||
# get rid of all the runtime TRAINS
|
||||
preserve = ('TRAINS_API_HOST', 'TRAINS_WEB_HOST', 'TRAINS_FILES_HOST', 'TRAINS_CONFIG_FILE',
|
||||
'TRAINS_API_ACCESS_KEY', 'TRAINS_API_SECRET_KEY', 'TRAINS_API_HOST_VERIFY_CERT')
|
||||
|
||||
# setup os environment
|
||||
env = deepcopy(os.environ)
|
||||
for key in os.environ:
|
||||
if key.startswith('TRAINS') and key not in preserve:
|
||||
env.pop(key, None)
|
||||
|
||||
# execute jupyter notebook
|
||||
fd, local_filename = mkstemp()
|
||||
print('Running Jupyter Notebook Server on {} [{}]'.format(socket.gethostname(), socket.gethostbyname(socket.gethostname())))
|
||||
process = subprocess.Popen([sys.executable, '-m', 'jupyter', 'notebook'], env=env, stdout=fd, stderr=fd)
|
||||
|
||||
# print stdout/stderr
|
||||
prev_line_count = 0
|
||||
while True:
|
||||
try:
|
||||
process.wait(timeout=2.0 if prev_line_count == 0 else 15.0)
|
||||
except subprocess.TimeoutExpired:
|
||||
with open(local_filename, "rt") as f:
|
||||
# read new lines
|
||||
new_lines = f.readlines()
|
||||
if not new_lines:
|
||||
continue
|
||||
output = ''.join(new_lines)
|
||||
print(output)
|
||||
# update task comment with jupyter notebook server links
|
||||
if prev_line_count == 0:
|
||||
task.comment += '\n' + ''.join(line for line in new_lines if 'http://' in line or 'https://' in line)
|
||||
prev_line_count += len(new_lines)
|
||||
|
||||
os.lseek(fd, 0, 0)
|
||||
os.ftruncate(fd, 0)
|
||||
continue
|
||||
break
|
||||
|
||||
# cleanup
|
||||
os.close(fd)
|
||||
try:
|
||||
os.unlink(local_filename)
|
||||
except:
|
||||
pass
|
Loading…
Reference in New Issue
Block a user