##// END OF EJS Templates
Fix race condition in javascript kernel message processing...
Fix race condition in javascript kernel message processing Because the binary messages are now deserialized using the asynchronous FileReader API, we need to have some way to force the messages to still be processed in the order they are received. This patch implements a simple processing queue using promises.

File last commit:

r19453:3cc62d01
r20441:834cd9c4
Show More
client.py
38 lines | 1.2 KiB | text/x-python | PythonLexer
MinRK
split KernelManager into KernelManager + KernelClient
r10285 """Implements a fully blocking kernel client.
Useful for test suites and blocking terminal interfaces.
"""
Thomas Kluyver
Move kernel_info for adaptation onto KernelClient
r19216 # Copyright (c) IPython Development Team.
# Distributed under the terms of the Modified BSD License.
MinRK
split KernelManager into KernelManager + KernelClient
r10285
Thomas Kluyver
Move kernel_info for adaptation onto KernelClient
r19216 try:
from queue import Empty # Python 3
except ImportError:
from Queue import Empty # Python 2
MinRK
split KernelManager into KernelManager + KernelClient
r10285
from IPython.utils.traitlets import Type
Thomas Kluyver
Simplify HBChannel inheritance
r19227 from IPython.kernel.channels import HBChannel
MinRK
split KernelManager into KernelManager + KernelClient
r10285 from IPython.kernel.client import KernelClient
Thomas Kluyver
Simplify HBChannel inheritance
r19227 from .channels import ZMQSocketChannel
MinRK
split KernelManager into KernelManager + KernelClient
r10285
class BlockingKernelClient(KernelClient):
Thomas Kluyver
Move kernel_info for adaptation onto KernelClient
r19216 def wait_for_ready(self):
# Wait for kernel info reply on shell channel
while True:
msg = self.shell_channel.get_msg(block=True)
if msg['msg_type'] == 'kernel_info_reply':
self._handle_kernel_info_reply(msg)
break
# Flush IOPub channel
while True:
try:
msg = self.iopub_channel.get_msg(block=True, timeout=0.2)
except Empty:
break
MinRK
split KernelManager into KernelManager + KernelClient
r10285
# The classes to use for the various channels
Thomas Kluyver
Move ZMQ socket creation out of channels
r19217 shell_channel_class = Type(ZMQSocketChannel)
iopub_channel_class = Type(ZMQSocketChannel)
stdin_channel_class = Type(ZMQSocketChannel)
Thomas Kluyver
Simplify HBChannel inheritance
r19227 hb_channel_class = Type(HBChannel)