我尝试在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”
目前没有回答
相关问题 更多 >
编程相关推荐