PeerTube/server/lib/worker/parent-process.ts

78 lines
2.8 KiB
TypeScript
Raw Normal View History

import { join } from 'path'
import Piscina from 'piscina'
2022-06-28 09:09:03 +02:00
import { processImage } from '@server/helpers/image-utils'
2022-11-16 14:40:10 +01:00
import { JOB_CONCURRENCY, WORKER_THREADS } from '@server/initializers/constants'
import { httpBroadcast } from './workers/http-broadcast'
import { downloadImage } from './workers/image-downloader'
2022-06-28 09:09:03 +02:00
let downloadImageWorker: Piscina
function downloadImageFromWorker (options: Parameters<typeof downloadImage>[0]): Promise<ReturnType<typeof downloadImage>> {
2022-06-28 09:09:03 +02:00
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)
}
2022-06-27 11:53:12 +02:00
// ---------------------------------------------------------------------------
2022-06-28 09:09:03 +02:00
let processImageWorker: Piscina
2022-06-27 11:53:12 +02:00
function processImageFromWorker (options: Parameters<typeof processImage>[0]): Promise<ReturnType<typeof processImage>> {
2022-06-28 09:09:03 +02:00
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
})
}
2022-06-27 11:53:12 +02:00
return processImageWorker.run(options)
}
// ---------------------------------------------------------------------------
let parallelHTTPBroadcastWorker: Piscina
function parallelHTTPBroadcastFromWorker (options: Parameters<typeof httpBroadcast>[0]): Promise<ReturnType<typeof httpBroadcast>> {
if (!parallelHTTPBroadcastWorker) {
parallelHTTPBroadcastWorker = new Piscina({
filename: join(__dirname, 'workers', 'http-broadcast.js'),
2022-11-16 14:40:10 +01:00
// Keep it sync with job concurrency so the worker will accept all the requests sent by the parallelized jobs
concurrentTasksPerWorker: JOB_CONCURRENCY['activitypub-http-broadcast-parallel'],
maxThreads: 1
})
}
return parallelHTTPBroadcastWorker.run(options)
}
// ---------------------------------------------------------------------------
let sequentialHTTPBroadcastWorker: Piscina
function sequentialHTTPBroadcastFromWorker (options: Parameters<typeof httpBroadcast>[0]): Promise<ReturnType<typeof httpBroadcast>> {
if (!sequentialHTTPBroadcastWorker) {
sequentialHTTPBroadcastWorker = new Piscina({
filename: join(__dirname, 'workers', 'http-broadcast.js'),
2022-11-16 14:40:10 +01:00
// Keep it sync with job concurrency so the worker will accept all the requests sent by the parallelized jobs
concurrentTasksPerWorker: JOB_CONCURRENCY['activitypub-http-broadcast'],
maxThreads: 1
})
}
return sequentialHTTPBroadcastWorker.run(options)
}
export {
2022-06-27 11:53:12 +02:00
downloadImageFromWorker,
processImageFromWorker,
parallelHTTPBroadcastFromWorker,
sequentialHTTPBroadcastFromWorker
}