如何向 IPython 中的 ThreadedKernelClient 添加回调?

How can I add a callback to a ThreadedKernelClient in IPython?

目前我正在通过以下方式获得 ThreadedKernelClient

kernel_manager = KernelManager(client_class='IPython.kernel.threaded.ThreadedKernelClient')
kernel_manager.start_kernel()
kernel_client = kernel_manager.client()

但是,我不确定如何为收到的消息注册回调(在 运行 execute 之后)。谁能指出我正确的方向?

我所做的是子类ThreadedZMQSocketChannelThreadedKernelClient,并覆盖了call_handlers,例如:

class TestChannel(ThreadedZMQSocketChannel):
    def call_handlers(self, msg):
        # do something


class TestClient(ThreadedKernelClient):
    iopub_channel_class = Type(TestChannel)
    shell_channel_class = Type(TestChannel)
    stdin_channel_class = Type(TestChannel)

你的经理看起来像:

kernel_manager = KernelManager(kernel_name='python', client_class='__main__.TestClient')

一旦您 start_channels,您的 call_handlers 方法将被调用,并使用 execute.

等方法的结果