##// END OF EJS Templates
better flush iopub with AsyncResults...
better flush iopub with AsyncResults requesting metadata (e.g. ar.data or ar.stdout) will result in flushing iopub if the outputs are incomplete, so separate wait(0) need not be called. This also applies the workaround discussed in #2215

File last commit:

r5614:f7e44e62
r8140:c0973b13
Show More
blockingkernelmanager.py
154 lines | 4.9 KiB | text/x-python | PythonLexer
/ IPython / zmq / blockingkernelmanager.py
Fernando Perez
Rework messaging to better conform to our spec....
r2926 """Implement a fully blocking kernel manager.
Useful for test suites and blocking terminal interfaces.
"""
#-----------------------------------------------------------------------------
Matthias BUSSONNIER
update copyright to 2011/20xx-2011...
r5390 # Copyright (C) 2010-2011 The IPython Development Team
Fernando Perez
Rework messaging to better conform to our spec....
r2926 #
# Distributed under the terms of the BSD License. The full license is in
# the file COPYING.txt, distributed as part of this software.
#-----------------------------------------------------------------------------
#-----------------------------------------------------------------------------
# Imports
#-----------------------------------------------------------------------------
from __future__ import print_function
# Stdlib
Brian Granger
Added initial draft of blockingkernelmanager.py.
r2693 from Queue import Queue, Empty
Thomas Kluyver
Refactor and simplification of zmqterminal.
r5596 from threading import Event
Brian Granger
Added initial draft of blockingkernelmanager.py.
r2693
Fernando Perez
Rework messaging to better conform to our spec....
r2926 # Our own
from IPython.utils import io
from IPython.utils.traitlets import Type
Brian Granger
Added initial draft of blockingkernelmanager.py.
r2693
MinRK
cleanup channel names to match function not socket...
r3974 from .kernelmanager import (KernelManager, SubSocketChannel, HBSocketChannel,
ShellSocketChannel, StdInSocketChannel)
Brian Granger
Added initial draft of blockingkernelmanager.py.
r2693
Fernando Perez
Rework messaging to better conform to our spec....
r2926 #-----------------------------------------------------------------------------
# Functions and classes
#-----------------------------------------------------------------------------
Brian Granger
Added initial draft of blockingkernelmanager.py.
r2693
class BlockingSubSocketChannel(SubSocketChannel):
def __init__(self, context, session, address=None):
epatters
Add missing msg queue + comment out debug printing in BlockingKernelManager.
r3825 super(BlockingSubSocketChannel, self).__init__(context, session,
address)
Brian Granger
Added initial draft of blockingkernelmanager.py.
r2693 self._in_queue = Queue()
def call_handlers(self, msg):
epatters
Add missing msg queue + comment out debug printing in BlockingKernelManager.
r3825 #io.rprint('[[Sub]]', msg) # dbg
Brian Granger
Added initial draft of blockingkernelmanager.py.
r2693 self._in_queue.put(msg)
def msg_ready(self):
"""Is there a message that has been received?"""
if self._in_queue.qsize() == 0:
return False
else:
return True
def get_msg(self, block=True, timeout=None):
"""Get a message if there is one that is ready."""
MinRK
never call Queue.get(block=True, timeout=None)...
r4252 if block and timeout is None:
# never use timeout=None, because get
# becomes uninterruptible
timeout = 1e6
David
Fixed two minor typos.
r3233 return self._in_queue.get(block, timeout)
Fernando Perez
Rework messaging to better conform to our spec....
r2926
def get_msgs(self):
"""Get all messages that are currently ready."""
msgs = []
while True:
try:
msgs.append(self.get_msg(block=False))
except Empty:
break
return msgs
MinRK
cleanup channel names to match function not socket...
r3974 class BlockingShellSocketChannel(ShellSocketChannel):
Fernando Perez
Rework messaging to better conform to our spec....
r2926
def __init__(self, context, session, address=None):
MinRK
cleanup channel names to match function not socket...
r3974 super(BlockingShellSocketChannel, self).__init__(context, session,
epatters
Add missing msg queue + comment out debug printing in BlockingKernelManager.
r3825 address)
Fernando Perez
Rework messaging to better conform to our spec....
r2926 self._in_queue = Queue()
def call_handlers(self, msg):
MinRK
cleanup channel names to match function not socket...
r3974 #io.rprint('[[Shell]]', msg) # dbg
epatters
Add missing msg queue + comment out debug printing in BlockingKernelManager.
r3825 self._in_queue.put(msg)
Fernando Perez
Rework messaging to better conform to our spec....
r2926
def msg_ready(self):
"""Is there a message that has been received?"""
if self._in_queue.qsize() == 0:
return False
Brian Granger
Added initial draft of blockingkernelmanager.py.
r2693 else:
Fernando Perez
Rework messaging to better conform to our spec....
r2926 return True
def get_msg(self, block=True, timeout=None):
"""Get a message if there is one that is ready."""
MinRK
never call Queue.get(block=True, timeout=None)...
r4252 if block and timeout is None:
# never use timeout=None, because get
# becomes uninterruptible
timeout = 1e6
David
Fixed two minor typos.
r3233 return self._in_queue.get(block, timeout)
Brian Granger
Added initial draft of blockingkernelmanager.py.
r2693
def get_msgs(self):
"""Get all messages that are currently ready."""
msgs = []
while True:
try:
Fernando Perez
Rework messaging to better conform to our spec....
r2926 msgs.append(self.get_msg(block=False))
except Empty:
Brian Granger
Added initial draft of blockingkernelmanager.py.
r2693 break
Fernando Perez
Rework messaging to better conform to our spec....
r2926 return msgs
epatters
Add missing msg queue + comment out debug printing in BlockingKernelManager.
r3825
Fernando Perez
Rework messaging to better conform to our spec....
r2926
MinRK
cleanup channel names to match function not socket...
r3974 class BlockingStdInSocketChannel(StdInSocketChannel):
epatters
Add missing msg queue + comment out debug printing in BlockingKernelManager.
r3825
Thomas Kluyver
Refactor and simplification of zmqterminal.
r5596 def __init__(self, context, session, address=None):
MinRK
rebased and updated to master
r5599 super(BlockingStdInSocketChannel, self).__init__(context, session, address)
Thomas Kluyver
Refactor and simplification of zmqterminal.
r5596 self._in_queue = Queue()
Fernando Perez
Rework messaging to better conform to our spec....
r2926 def call_handlers(self, msg):
epatters
Add missing msg queue + comment out debug printing in BlockingKernelManager.
r3825 #io.rprint('[[Rep]]', msg) # dbg
Thomas Kluyver
Refactor and simplification of zmqterminal.
r5596 self._in_queue.put(msg)
def get_msg(self, block=True, timeout=None):
"Gets a message if there is one that is ready."
return self._in_queue.get(block, timeout)
def get_msgs(self):
"""Get all messages that are currently ready."""
msgs = []
while True:
try:
msgs.append(self.get_msg(block=False))
except Empty:
break
return msgs
def msg_ready(self):
"Is there a message that has been received?"
return not self._in_queue.empty()
Fernando Perez
Rework messaging to better conform to our spec....
r2926
class BlockingHBSocketChannel(HBSocketChannel):
epatters
Add missing msg queue + comment out debug printing in BlockingKernelManager.
r3825
MinRK
Fixes to the heartbeat channel...
r5614 # This kernel needs quicker monitoring, shorten to 1 sec.
# less than 0.5s is unreliable, and will get occasional
# false reports of missed beats.
time_to_dead = 1.
Fernando Perez
Rework messaging to better conform to our spec....
r2926
def call_handlers(self, since_last_heartbeat):
MinRK
Fixes to the heartbeat channel...
r5614 """pause beating on missed heartbeat"""
epatters
Add missing msg queue + comment out debug printing in BlockingKernelManager.
r3825 pass
Fernando Perez
Rework messaging to better conform to our spec....
r2926
class BlockingKernelManager(KernelManager):
# The classes to use for the various channels.
MinRK
cleanup channel names to match function not socket...
r3974 shell_channel_class = Type(BlockingShellSocketChannel)
Fernando Perez
Rework messaging to better conform to our spec....
r2926 sub_channel_class = Type(BlockingSubSocketChannel)
MinRK
cleanup channel names to match function not socket...
r3974 stdin_channel_class = Type(BlockingStdInSocketChannel)
Fernando Perez
Rework messaging to better conform to our spec....
r2926 hb_channel_class = Type(BlockingHBSocketChannel)