2014-10-28 22 views
26

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

+1

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

+3

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

+1

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

Odpowiedz

-3

Od https://github.com/jupyter/notebook/blob/f19d68a33193dff07e62f11da0ebce331e8acbda/notebook/services/kernels/handlers.py#L75:

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() 
+0

Er ... dlaczego spadł? – knite

+0

Nie spadłem, ale myślę, że wyjaśnienie, co chciałeś powiedzieć z tym blokiem kodu, lub jak użyć tego bloku kodu do zresetowania importu byłoby wspaniałe – greole

+0

To zależy od wielu zewnętrznych rzeczy i jest specyficzny dla aplikacji internetowych. – erickrf

8

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).

3

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 
+0

@greole czy moje rozwiązanie nie zadziałało? –

0

IPython Qt-console ma funkcję resetowania jądra. Możesz go użyć, jeśli używasz IPython Qt. IMO jest lepsze niż użycie z powłoki.

enter image description here