From fb97f38af97d903f6096eba30acb035cd2f4eaa0 Mon Sep 17 00:00:00 2001 From: jonm Date: Sun, 19 Mar 2023 09:47:44 +0200 Subject: [PATCH] close all workers when process is done --- src/Compression/bloscZarrDecompress.js | 3 ++- src/IO/Analyze/computeHistograms.js | 3 ++- src/IO/Analyze/computeRanges.js | 4 ++-- src/IO/InMemoryMultiscaleSpatialImage.js | 2 ++ src/IO/MultiscaleSpatialImage.js | 4 ++-- src/`` | 0 6 files changed, 10 insertions(+), 6 deletions(-) create mode 100644 src/`` diff --git a/src/Compression/bloscZarrDecompress.js b/src/Compression/bloscZarrDecompress.js index 5e87bb79d..7e56a51af 100644 --- a/src/Compression/bloscZarrDecompress.js +++ b/src/Compression/bloscZarrDecompress.js @@ -4,6 +4,7 @@ import { getSize } from '../IO/dtypeUtils' const cores = navigator.hardwareConcurrency ? navigator.hardwareConcurrency : 4 const numberOfWorkers = cores + Math.floor(Math.sqrt(cores)) const workerPool = new WorkerPool(numberOfWorkers, runPipeline) +workerPool.terminateWorkers() /** * Input: @@ -53,7 +54,7 @@ async function bloscZarrDecompress(chunkData) { taskArgsArray.push(['BloscZarr', args, desiredOutputs, inputs]) } const results = await workerPool.runTasks(taskArgsArray).promise - + workerPool.terminateWorkers() const decompressedChunks = [] for (let index = 0; index < results.length; index++) { // console.log(results[index].stdout) diff --git a/src/IO/Analyze/computeHistograms.js b/src/IO/Analyze/computeHistograms.js index d2dc5300b..8f07bfca4 100644 --- a/src/IO/Analyze/computeHistograms.js +++ b/src/IO/Analyze/computeHistograms.js @@ -11,7 +11,7 @@ const updateHistogramWorkerPool = webWorkerPromiseWorkerPool( UpdateHistogramWorker, 'updateHistogram' ) - +updateHistogramWorkerPool.terminateWorkers() export const computeHistogram = async ( values, component, @@ -83,5 +83,6 @@ export const computeHistogram = async ( for (let ii = 0; ii < numberOfBins; ii++) { histogram[ii] /= maxHistogram } + updateHistogramWorkerPool.terminateWorkers() return histogram } diff --git a/src/IO/Analyze/computeRanges.js b/src/IO/Analyze/computeRanges.js index a16b1a36e..71e04170d 100644 --- a/src/IO/Analyze/computeRanges.js +++ b/src/IO/Analyze/computeRanges.js @@ -12,7 +12,7 @@ const computeRangeWorkerPool = webWorkerPromiseWorkerPool( ComputeRangesWorker, 'computeRanges' ) - +computeRangeWorkerPool.terminateWorkers() export async function computeRanges(values, numberOfComponents = 1) { const numberOfSplits = numberOfWorkers @@ -58,6 +58,6 @@ export async function computeRanges(values, numberOfComponents = 1) { helpers[compIdx].add(max) }) }) - + computeRangeWorkerPool.terminateWorkers() return helpers.map(h => h.getRange()) } diff --git a/src/IO/InMemoryMultiscaleSpatialImage.js b/src/IO/InMemoryMultiscaleSpatialImage.js index 07413bc73..54f7e522f 100644 --- a/src/IO/InMemoryMultiscaleSpatialImage.js +++ b/src/IO/InMemoryMultiscaleSpatialImage.js @@ -15,6 +15,7 @@ const numberOfWorkers = navigator.hardwareConcurrency ? navigator.hardwareConcurrency : 6 const downsampleWorkerPool = new WorkerPool(numberOfWorkers, runPipeline) +downsampleWorkerPool.terminateWorkers() class Coords { constructor(image, dims) { @@ -269,6 +270,7 @@ class InMemoryMultiscaleSpatialImage extends MultiscaleSpatialImage { } const results = await downsampleWorkerPool.runTasks(downsampleTaskArgs) .promise + downsampleWorkerPool.terminateWorkers() const validResults = results.filter(r => r.returnValue === 0) const imageSplits = validResults.map(({ outputs }) => outputs[0].data) currentImage = stackImages(imageSplits) diff --git a/src/IO/MultiscaleSpatialImage.js b/src/IO/MultiscaleSpatialImage.js index 58b6d60ce..f32a491e2 100644 --- a/src/IO/MultiscaleSpatialImage.js +++ b/src/IO/MultiscaleSpatialImage.js @@ -13,7 +13,7 @@ const imageDataFromChunksWorker = new ImageDataFromChunksWorker() const imageDataFromChunksWorkerPromise = new WebworkerPromise( imageDataFromChunksWorker ) - +imageDataFromChunksWorkerPromise.terminate() /* Every element corresponds to a pyramid scale Lower scales, corresponds to a higher index, correspond to a lower resolution. @@ -341,7 +341,7 @@ class MultiscaleSpatialImage { 'imageDataFromChunks', args ) - + imageDataFromChunksWorkerPromise.terminate() return { imageType: this.imageType, name: this.scaleInfo[scale].name, diff --git a/src/`` b/src/`` new file mode 100644 index 000000000..e69de29bb