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
risposta
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()
Ehm ... perché il downvote? – knite
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
Dipende da un sacco di cose esterne e è specifico per le applicazioni web. – erickrf
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).
Nella console qt si potrebbe colpire ctrl-
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?
@greole la mia soluzione non ha funzionato per te? –
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
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
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