Моя цель - подключиться к работающему jupyter qtconsole
с помощью jupyter_client
API и удаленно выполнять команды на этом ядре. Выполнение кода работает, но кажется невозможным прервать выполнение кода из внешнего интерфейса ядра, используя Ctrl-C
(либо в qtconsole
, либо в console
). Ниже приведен пример кода, в котором я выполняю в другом экземпляре qtconsole
, и это не может быть прервано:
import jupyter_client as jc
# Find last accessed connection file
cfile = jc.find_connection_file()
km = jc.KernelManager()
km.load_connection_file(connection_file=cfile)
kc.start_channels()
msg = """
import time
for k in range(10):
print(k)
time.sleep(1)
"""
kc.execute(msg)
Единственный способ, который я обнаружил, чтобы прервать выполнение, - это отправить SIGINIT
напрямую, например, запустив следующее в другом экземпляре jupyter
:
import os
import signal
# pid is process identifier of jupyter kernel that runs the loop
os.kill(pid, signal.SIGINT)
Вопрос : Есть ли более элегантный способ прерывания работающего ядра с помощью jupyter_client
API (например, KernelClient
или KernelManager
)?
PS: Существует также открытая проблема на github, в которой упоминается эта проблема, но разработчики jupyter пока не очень отзывчивы.