@@ -298,12 +298,13 @@ def __init__(self, nb, km=None, **kw):
298
298
super ().__init__ (** kw )
299
299
self .nb = nb
300
300
self .km = km
301
- self .reset_execution_trackers ()
301
+ self .reset_execution_trackers (reset_kc = True )
302
302
303
- def reset_execution_trackers (self ):
303
+ def reset_execution_trackers (self , reset_kc = False ):
304
304
"""Resets any per-execution trackers.
305
305
"""
306
- self .kc = None
306
+ if reset_kc :
307
+ self .kc = None
307
308
self .code_cells_executed = 0
308
309
self ._display_id_map = {}
309
310
self .widget_state = {}
@@ -412,7 +413,7 @@ async def async_setup_kernel(self, **kwargs):
412
413
"""
413
414
Context manager for setting up the kernel to execute a notebook.
414
415
415
- The assigns the Kernel Manager (`self.km`) if missing and Kernel Client(`self.kc`).
416
+ This assigns the Kernel Manager (`self.km`) if missing and Kernel Client(`self.kc`).
416
417
417
418
When control returns from the yield it stops the client's zmq channels, and shuts
418
419
down the kernel.
@@ -431,12 +432,23 @@ async def async_execute(self, **kwargs):
431
432
"""
432
433
Executes each code cell.
433
434
435
+ Parameters
436
+ ----------
437
+ kwargs :
438
+ Any option for `self.kernel_manager_class.start_kernel()`. Because
439
+ that defaults to AsyncKernelManager, this will likely include options
440
+ accepted by `AsyncKernelManager.start_kernel()``, which includes `cwd`.
441
+ If present, `reset_kc` is passed to `self.reset_execution_trackers`:
442
+ if True, the kernel client will be reset and a new one will be created
443
+ (default: False).
444
+
434
445
Returns
435
446
-------
436
447
nb : NotebookNode
437
448
The executed notebook.
438
449
"""
439
- self .reset_execution_trackers ()
450
+ reset_kc = kwargs .pop ('reset_kc' , False )
451
+ self .reset_execution_trackers (reset_kc = reset_kc )
440
452
441
453
async with self .async_setup_kernel (** kwargs ):
442
454
self .log .info ("Executing notebook with kernel: %s" % self .kernel_name )
0 commit comments