Zastanawiam się, czy istnieje sposób na ponowne uruchomienie jądra ipython bez zamykania go, tak jak funkcja restartu jądra, która istnieje w notatniku. Próbowałem %reset
, ale nie wydaje się, aby wyczyścić import.Resetowanie jądra ipython
Odpowiedz
class KernelActionHandler(APIHandler):
@web.authenticated
@json_errors
@gen.coroutine
def post(self, kernel_id, action):
km = self.kernel_manager
if action == 'interrupt':
km.interrupt_kernel(kernel_id)
self.set_status(204)
if action == 'restart':
try:
yield gen.maybe_future(km.restart_kernel(kernel_id))
except Exception as e:
self.log.error("Exception restarting kernel", exc_info=True)
self.set_status(500)
else:
model = km.kernel_model(kernel_id)
self.write(json.dumps(model))
self.finish()
Chociaż byłoby przydatne jeśli %reset
by wyczyścić nazw i pamięć podręczną dla importu (jak w notesie) można jednoznacznie przeładować uprzednio importowanego modułu używającego importlib.reload
w python3 .4 lub imp.reload
w python3.0-3.3 (iw razie potrzeby zresetuj jądro w drugim kroku).
W konsoli qt można uderzyć ctrl-
mogę ponownie uruchomić jądro, ale niektóre sesje konsoli dłużej ponownie. Notebook wykrywa natychmiast restart jądra. Klasa
ipykernel.ipkernel.IPythonKernel
ma metodę do_shutdown
o parametrze restart
, która domyślnie przyjmuje postać False
.
Uzyskaj odniesienie do ipykernel.kernelapp.IPKernelApp
, które ma odniesienie do jądra i wywołaj do_shutdown
jądra, przekazując True
.
import IPython
app = IPython.Application.instance()
app.kernel.do_shutdown(True)
Jak testowałem?
$ #start notebook
$ jupyter notebook
$ #connect to existing kernel
$ jupyter console --existing
@greole czy moje rozwiązanie nie zadziałało? –
Dla mnie wydaje się, aby wyczyścić również import (ipython 2.2, MacOSX): W [1]:% kogo nazw Interactive jest pusty. W [2]: import os W [3]:%, który Dane o typie zmiennym/informacje ------------------------- ----- moduł os .7/lib/python2.7/os.pyc'> W [4]:% reset Po usunięciu zmiennych nie można odzyskany. Kontynuuj (y/[n])? y W [5]:% who Interaktywna przestrzeń nazw jest pusta. –
bjonen
Tak, przestrzeń nazw jest wyczyszczona, ale podczas ponownego importowania wydaje się, że czyta ona buforowaną wersję modułu, więc muszę użyć czegoś takiego jak http://stackoverflow.com/questions/437589/how-do-i-unload- reload-a-python-module. – greole
Ah ok, rozumiem. Możesz również użyć http://ipython.org/ipython-doc/dev/config/extensions/autoreload.html. Ale rozumiem, że nie jest to dokładnie to, czego szukasz. – bjonen