@@ -257,8 +257,7 @@ def __init__(self, notebook_id, baseurl):
257257 self .message_callbacks = dict ()
258258 self .start_kernel ()
259259 _thread .start_new_thread (self .process_messages , ())
260- self .status_callback = None
261- self .pager_callback = None
260+ self .status_callback = lambda x : None
262261 self .encoding = 'utf-8'
263262
264263 @property
@@ -280,11 +279,14 @@ def start_kernel(self):
280279 url = "http://" + self .baseurl + "/kernels?notebook=" + self .notebook_id
281280 req = urlopen (url , data = b"" ) # data="" makes it POST request
282281 req .read ()
282+ self .create_websockets ()
283283
284284 def restart_kernel (self ):
285285 url = "http://" + self .baseurl + "/kernels/" + self .kernel_id + "/restart"
286286 req = urlopen (url , data = b"" )
287287 req .read ()
288+ self .create_websockets ()
289+ self .status_callback ("idle" )
288290
289291 def interrupt_kernel (self ):
290292 url = "http://" + self .baseurl + "/kernels/" + self .kernel_id + "/interrupt"
@@ -336,17 +338,17 @@ def register_callbacks(self, msg_id, output_callback,
336338 def process_messages (self ):
337339 while True :
338340 m = self .message_queue .get ()
339- try :
340- parent_id = m ["parent_header" ]["msg_id" ]
341- except :
342- print (("No 'parent_header' in the message: " + str (m )))
343- continue
344341 content = m ["content" ]
345342 msg_type = m ["header" ]["msg_type" ]
346343
344+ if ("parent_header" in m ) and ("msg_id" in m ["parent_header" ]):
345+ parent_id = m ["parent_header" ]["msg_id" ]
346+ else :
347+ parent_id = None
348+
347349 if msg_type == "status" :
348- if self . status_callback :
349- self .status_callback (content )
350+ if "execution_state" in content :
351+ self .status_callback (content [ "execution_state" ] )
350352
351353 elif parent_id in self .message_callbacks :
352354 callbacks = self .message_callbacks [parent_id ]
@@ -383,17 +385,25 @@ def grab_output(msg_type, content):
383385 return grab_output
384386
385387 def create_websockets (self ):
388+ if self .shell is not None :
389+ self .shell .close ()
390+
391+ if self .iopub is not None :
392+ self .iopub .close ()
393+
386394 url = "ws://" + self .baseurl + "/kernels/" + self .kernel_id + "/"
387395 self .shell = websocket .WebSocketApp (url = url + "shell" ,
388396 on_message = lambda ws , msg : self .on_shell_msg (msg ),
389- on_open = lambda ws : ws .send ("hallo_shell" ))
397+ on_open = lambda ws : ws .send ("" ),
398+ on_error = lambda ws , err : print (err ))
390399 self .iopub = websocket .WebSocketApp (url = url + "iopub" ,
391400 on_message = lambda ws , msg : self .on_iopub_msg (msg ),
392- on_open = lambda ws : ws .send ("" ))
401+ on_open = lambda ws : ws .send ("" ),
402+ on_error = lambda ws , err : print (err ))
393403
394404 _thread .start_new_thread (self .shell .run_forever , ())
395405 _thread .start_new_thread (self .iopub .run_forever , ())
396- sleep (2 )
406+ sleep (1 )
397407 self .running = True
398408
399409 def create_message (self , msg_type , content ):
0 commit comments