Skip to content

Commit 1047311

Browse files
committed
proper disposing of jupyter classes
1 parent c0f3468 commit 1047311

2 files changed

Lines changed: 34 additions & 1 deletion

File tree

src/client/jupyter/jupyter_client/main.ts

Lines changed: 33 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,33 @@ export class JupyterClientAdapter extends EventEmitter implements IJupyterClient
2424
private ipythonAdapter: JupyterSocketClient;
2525

2626
private startDef: Deferred<any>;
27+
28+
public dispose() {
29+
try {
30+
this.ipythonAdapter.sendKernelCommand(this.lastStartedKernelUUID, KernelCommand.shutdown)
31+
}
32+
catch (ex) {
33+
}
34+
try {
35+
this.ipythonAdapter.dispose();
36+
}
37+
catch (ex) {
38+
}
39+
try {
40+
this.process.kill();
41+
}
42+
catch (ex) {
43+
}
44+
try {
45+
this.socketServer.Stop();
46+
}
47+
catch (ex) {
48+
}
49+
this.ipythonAdapter = null;
50+
this.process = null;
51+
this.socketServer = null;
52+
this.startDef = null;
53+
}
2754
public start(envVariables?: { [key: string]: string }): Promise<any> {
2855
if (this.startDef) {
2956
return this.startDef.promise;
@@ -32,6 +59,7 @@ export class JupyterClientAdapter extends EventEmitter implements IJupyterClient
3259
this.startDef = createDeferred<any>();
3360
const pyFile = path.join(__dirname, '..', '..', '..', '..', 'pythonFiles', 'PythonTools', 'ipythonServer.py');
3461
const newEnv = {};
62+
// const newEnv = {'DEBUG_DJAYAMANNE_IPYTHON':'1'};
3563
Object.assign(newEnv, envVariables);
3664
Object.assign(newEnv, process.env);
3765

@@ -119,14 +147,18 @@ export class JupyterClientAdapter extends EventEmitter implements IJupyterClient
119147
public getAllKernelSpecs(): Promise<{ [key: string]: Kernelspec }> {
120148
return this.start().then(() => this.ipythonAdapter.listKernelSpecs());
121149
}
150+
private lastStartedKernelUUID: string;
122151
public startKernel(kernelSpec: KernelspecMetadata): Promise<[string, any, string]> {
123152
return this.start().then(() => this.getAllKernelSpecs()).then(specks => {
124153
// ok given the specks, find the name of the kernelspec
125154
const kernelSpecName = Object.keys(specks).find(kernelSpecName => {
126155
const spec = specks[kernelSpecName];
127156
return spec.spec.display_name === kernelSpec.display_name;
128157
});
129-
return this.ipythonAdapter.startKernel(kernelSpecName);
158+
return this.ipythonAdapter.startKernel(kernelSpecName).then(info => {
159+
this.lastStartedKernelUUID = info[0];
160+
return info;
161+
});
130162
});
131163
}
132164
public shutdownkernel(kernelUUID: string): Promise<any> {

src/client/jupyter/kernel-manager.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,7 @@ export class KernelManagerImpl extends EventEmitter {
3333
kernel.dispose();
3434
});
3535
this._runningKernels.clear();
36+
this.jupyterClient.dispose();
3637
}
3738

3839
public setRunningKernelFor(language: string, kernel: Kernel) {

0 commit comments

Comments
 (0)