2014-10-28 15 views
26

Mi chiedevo se c'è un modo per riavviare il kernel ipython senza chiuderlo, come la funzione di riavvio del kernel che esiste nel notebook. Ho provato %reset ma questo non sembra cancellare le importazioni.Reimposta il kernel ipython

+1

Per me sembra per cancellare anche le importazioni (ipython 2.2, MacOSX): In [1]:% whos namespace Interactive è vuoto. In [2]: import os In [3]:% whos Variabile Tipo Dati/Info ------------------------- ----- modulo os .7/lib/python2.7/os.pyc'> In [4]:% reset Una volta cancellato, le variabili non possono essere recuperato. Procedere (y/[n])? y In [5]:% whos Lo spazio dei nomi interattivo è vuoto. – bjonen

+3

Sì, lo spazio dei nomi è cancellato, ma quando si reimporta sembra leggere una versione cache del modulo, quindi devo usare qualcosa come http://stackoverflow.com/questions/437589/how-do-i-unload- ricarica-a-pitone modulo. – greole

+1

Ah ok, capisco. Puoi anche usare http://ipython.org/ipython-doc/dev/config/extensions/autoreload.html. Ma capisco che questo non è esattamente quello che stai cercando. – bjonen

risposta

-3

Da 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

Ehm ... perché il downvote? – knite

+0

Non ho fatto downvoting, ma penso che un po 'di spiegazione cosa volevi dire con questo blocco di codice o come usare quel blocco di codice per resettare le importazioni sarebbe fantastico – greole

+0

Dipende da un sacco di cose esterne e è specifico per le applicazioni web. – erickrf

8

Anche se sarebbe utile se %reset sarebbe cancellare lo spazio dei nomi e la cache per le importazioni (come nel notebook) si può ricaricare in modo esplicito un modulo precedentemente importato utilizzando importlib.reload in python3 .4 o imp.reload in python3.0-3.3 (e se necessario resettare il kernel in un secondo passaggio).

1

Nella console qt si potrebbe colpire ctrl-

3

ho potuto riavviare il kernel, ma alcune sessioni di console richiedere più tempo per riconnettersi. Notebook rileva immediatamente il riavvio del kernel.

ipykernel.ipkernel.IPythonKernel metodo ha un metodo do_shutdown con restart parametro che per impostazione predefinita è False.

Ottenere un riferimento a ipykernel.kernelapp.IPKernelApp che ha un riferimento al kernel e chiamare do_shutdown del kernel passando True.

import IPython 
app = IPython.Application.instance() 
app.kernel.do_shutdown(True) 

Come ho provato?

+0

@greole la mia soluzione non ha funzionato per te? –

0

IPython Qt-console ha una funzione di ripristino del kernel. Potresti usarlo se stai usando IPython Qt. IMO è meglio che usare dalla shell.

enter image description here

Problemi correlati