]> git.immae.eu Git - github/Chocobozzz/PeerTube.git/blobdiff - server/lib/worker/parent-process.ts
Lazy load piscina
[github/Chocobozzz/PeerTube.git] / server / lib / worker / parent-process.ts
index 65300bbc880f39744517d63b43eff3d75f75beb9..4bc7f26207f97a44852f03bc1e2c54d78a546534 100644 (file)
@@ -1,28 +1,36 @@
 import { join } from 'path'
 import Piscina from 'piscina'
+import { processImage } from '@server/helpers/image-utils'
 import { WORKER_THREADS } from '@server/initializers/constants'
 import { downloadImage } from './workers/image-downloader'
-import { processImage } from '@server/helpers/image-utils'
 
-const downloadImagerWorker = new Piscina({
-  filename: join(__dirname, 'workers', 'image-downloader.js'),
-  concurrentTasksPerWorker: WORKER_THREADS.DOWNLOAD_IMAGE.CONCURRENCY,
-  maxThreads: WORKER_THREADS.DOWNLOAD_IMAGE.MAX_THREADS
-})
+let downloadImageWorker: Piscina
 
 function downloadImageFromWorker (options: Parameters<typeof downloadImage>[0]): Promise<ReturnType<typeof downloadImage>> {
-  return downloadImagerWorker.run(options)
+  if (!downloadImageWorker) {
+    downloadImageWorker = new Piscina({
+      filename: join(__dirname, 'workers', 'image-downloader.js'),
+      concurrentTasksPerWorker: WORKER_THREADS.DOWNLOAD_IMAGE.CONCURRENCY,
+      maxThreads: WORKER_THREADS.DOWNLOAD_IMAGE.MAX_THREADS
+    })
+  }
+
+  return downloadImageWorker.run(options)
 }
 
 // ---------------------------------------------------------------------------
 
-const processImageWorker = new Piscina({
-  filename: join(__dirname, 'workers', 'image-processor.js'),
-  concurrentTasksPerWorker: WORKER_THREADS.PROCESS_IMAGE.CONCURRENCY,
-  maxThreads: WORKER_THREADS.PROCESS_IMAGE.MAX_THREADS
-})
+let processImageWorker: Piscina
 
 function processImageFromWorker (options: Parameters<typeof processImage>[0]): Promise<ReturnType<typeof processImage>> {
+  if (!processImageWorker) {
+    processImageWorker = new Piscina({
+      filename: join(__dirname, 'workers', 'image-processor.js'),
+      concurrentTasksPerWorker: WORKER_THREADS.PROCESS_IMAGE.CONCURRENCY,
+      maxThreads: WORKER_THREADS.PROCESS_IMAGE.MAX_THREADS
+    })
+  }
+
   return processImageWorker.run(options)
 }