在python内核中运行子内核

2024-10-05 15:30:10 发布

您现在位置:Python中文网/ 问答频道 /正文

我尝试在python中将groovy内核作为子内核运行。我已经在python中添加了自定义单元魔法,因此当用户输入%%groovy时,应该使用jupyter_客户机管理器启动groovy内核并执行代码。当前,我在发送响应时遇到问题。感谢任何帮助。 以下是我目前为止的代码:

from IPython.core.magic import (Magics, magics_class,cell_magic)
from jupyter_client import manager
from ipykernel.kernelbase import Kernel

@magics_class
class GroovyKernelMagic(Magics,Kernel):
    _execution_count = 1

    def run_cell(self, code):
        if not self.KernelManager.is_alive():
            Kernel.send_response(Kernel.iopub_socket, 'stream',
                               {'name': 'stdout', 'text': 'Restarting kernel "{}"\n'.format(self.KernelManager)})
            self.KernelManager.restart_kernel(now=False)
            self.KernelClient = self.KernelManager.client()
        while self.KernelClient.shell_channel.msg_ready():
            self.KernelClient.shell_channel.get_msg()
        self.KernelClient.execute(code, silent=False)

        _execution_state = "busy"
        while _execution_state != 'idle':
            while self.KernelClient.iopub_channel.msg_ready():
                sub_msg = self.KernelClient.iopub_channel.get_msg()
                msg_type = sub_msg['header']['msg_type']
                if msg_type == 'status':
                    _execution_state = sub_msg["content"]["execution_state"]
                else:
                    if msg_type in ('execute_input', 'execute_result'):
                        sub_msg['content']['execution_count'] = self._execution_count

                    Kernel.send_response(Kernel.iopub_socket, msg_type, sub_msg['content'])
        reply = self.KernelClient.get_shell_msg(timeout=10)
        reply['content']['execution_count'] = self._execution_count
        return reply['content']

    @cell_magic
    def groovy(self, line, cell):
        self.KernelManager, self.KernelClient = manager.start_new_kernel(startup_timeout=60, kernel_name='groovy')
        return self.run_cell(cell)


ip = get_ipython()
ip.register_magics(GroovyKernelMagic)

这是错误堆栈跟踪:

在/测试魔法.py在groovy中(self、line、cell) 50 def groovy(self、line、cell): 51自我.KM, 自我.KC= manager.start_new_内核(startup_timeout=60,kernel_name='groovy') --->;52返回自行运行电池(单元格) 53 54岁

在/测试魔法.py运行单元(self,code) 42打印(消息类型) 43打印(sub_msg['content']) ---&大于44Kernel.send_响应(Kernel.iopup_套接字,消息类型,子消息['content']) 45答复=self.KC.get_shell_消息(超时=10) 46 reply['content']['execution\u count']=自己的执行数

Python3/lib/python3.5/site-packages/ipykernel/内核库.py发送响应中(self、stream、msg_or_type、content、ident、buffers、track、header、metadata) 343消息。 344“ -->;345返回self.session.send(stream,msg_or_type,content,self.\u parent_header, 346标识符、缓冲区、跟踪、标题、元数据) 347个

AttributeError:“Any”对象没有属性“session”


Tags: self消息gettypecountcellmsgcontent