##// END OF EJS Templates
Added 'start_listening' and 'stop_listening' methods to the kernel manager.
epatters -
Show More
@@ -16,7 +16,8 b' from zmq import POLLIN, POLLOUT, POLLERR'
16 from zmq.eventloop import ioloop
16 from zmq.eventloop import ioloop
17
17
18 # Local imports.
18 # Local imports.
19 from IPython.utils.traitlets import HasTraits, Any, Int, Instance, Str, Type
19 from IPython.utils.traitlets import HasTraits, Any, Bool, Int, Instance, Str, \
20 Type
20 from session import Session
21 from session import Session
21
22
22
23
@@ -296,6 +297,9 b' class KernelManager(HasTraits):'
296 frontend.
297 frontend.
297 """
298 """
298
299
300 # Whether the kernel manager is currently listening on its channels.
301 is_listening = Bool(False)
302
299 # The PyZMQ Context to use for communication with the kernel.
303 # The PyZMQ Context to use for communication with the kernel.
300 context = Instance(zmq.Context, ())
304 context = Instance(zmq.Context, ())
301
305
@@ -320,27 +324,51 b' class KernelManager(HasTraits):'
320 for trait in traits:
324 for trait in traits:
321 setattr(self, trait, traits[trait])
325 setattr(self, trait, traits[trait])
322
326
323 def start_kernel(self):
327 def start_listening(self):
324 """Start a localhost kernel. If ports have been specified, use
328 """Start listening on the specified ports. If already listening, raises
325 them. Otherwise, choose an open port at random.
329 a RuntimeError.
326 """
330 """
331 if self.is_listening:
332 raise RuntimeError("Cannot start listening. Already listening!")
333 else:
334 self.is_listening = True
327 self.sub_channel.start()
335 self.sub_channel.start()
328 self.xreq_channel.start()
336 self.xreq_channel.start()
329 self.rep_channel.start()
337 self.rep_channel.start()
330
338
331 def kill_kernel(self):
339 def stop_listening(self):
332 """Kill the running kernel.
340 """Stop listening. If not listening, does nothing. """
333 """
341 if self.is_listening:
342 self.is_listening = False
334 self.sub_channel.stop()
343 self.sub_channel.stop()
335 self.xreq_channel.stop()
344 self.xreq_channel.stop()
336 self.rep_channel.stop()
345 self.rep_channel.stop()
337
346
347 def start_kernel(self):
348 """Start a localhost kernel. If ports have been specified, use them.
349 Otherwise, choose an open port at random.
350 """
351 # TODO: start a kernel.
352 self.start_listening()
353
354 def kill_kernel(self):
355 """Kill the running kernel.
356 """
357 # TODO: kill the kernel.
358 self.stop_listening()
359
360 @property
338 def is_alive(self):
361 def is_alive(self):
339 """Is the kernel alive?"""
362 """ Returns whether the kernel is alive. """
363 if self.is_listening:
364 # TODO: check if alive.
340 return True
365 return True
366 else:
367 return False
341
368
342 def signal_kernel(self, signum):
369 def signal_kernel(self, signum):
343 """Send signum to the kernel."""
370 """Send signum to the kernel."""
371 # TODO: signal the kernel.
344
372
345 #--------------------------------------------------------------------------
373 #--------------------------------------------------------------------------
346 # Channels used for communication with the kernel:
374 # Channels used for communication with the kernel:
@@ -371,7 +399,7 b' class KernelManager(HasTraits):'
371 return self._rep_channel
399 return self._rep_channel
372
400
373 #--------------------------------------------------------------------------
401 #--------------------------------------------------------------------------
374 # Channel addresses:
402 # Channel address attributes:
375 #--------------------------------------------------------------------------
403 #--------------------------------------------------------------------------
376
404
377 def get_sub_address(self):
405 def get_sub_address(self):
General Comments 0
You need to be logged in to leave comments. Login now