Изящно прерывайте ядро ​​jupyter через API jupyter_client - PullRequest
0 голосов
/ 16 июня 2020

Моя цель - подключиться к работающему 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 пока не очень отзывчивы.

...