Запустите задание, используя определенный дочерний процесс в Node.js - PullRequest
0 голосов
/ 28 ноября 2018

Я знаю, как обработать дочерний процесс, но мое требование заключается в том, что я хочу использовать этот дочерний процесс для выполнения только определенной работы, например, при нажатии кнопки мне нужно обработать данные формы, чтобы сохранить их, как показано ниже.но этот пост-маршрут должен выполняться конкретным дочерним процессом, который я не создал ни другим дочерним процессом, ни мастером.

app.post('/saveuser', function(){
  user.save();
})

1 Ответ

0 голосов
/ 27 апреля 2019

post node v11.7.0 релизы Модуль 'worker_threads' доступен без экспериментального флага.он отлично подходит для однопроцессного и многопоточного использования.в версиях до 11.7.0 вам необходимо передать флаг --experimental-worker для доступа к нему.

Посетить официальную документацию Worker-Threads

/* app.js */
/* your code */

const { Worker, isMainThread, threadId, Worker, parentPort, workerData } = require('worker_threads')

console.log('is this main process', isMainThread)

app.post('/saveuser', function(){

  let userSaveWorker = new Worker('name_of_another_script.js', { workerData: 'pass any type of data' })

  userSaveWorker.on('message', returnData => {
    // do whatever you wants to do with data returned from worker
    // return response to user
  })

  userSaveWorker.unref() // this will allow worker to terminate
  userSaveWorker.terminate() // this will forcefully terminate it
  // you can use it in message listner

  userSaveWorker.on('end', () => /* gets called when worker process gets terminated */);
})

теперь скрипт для работникаprocess

name_of_another_script.js

const { Worker, isMainThread, threadId, Worker, parentPort, workerData } = require('worker_threads')

console.log('is this main process', isMainThread)

console.log('data received from parentProcess', workerData)

/* your code */
// do process & then send message back to parent

parentPort.postMessage('your processed data or result any data type')
// this will be received in app.js as .on('message') listener

вы даже можете запустить рабочий процесс без другой функции сценария или кода в виде строки вместо имени файла и передать другую опцию {eval: true}, и это сработает, вы даже можете передать workerDataа также ...

...