繁体   English   中英

使用Node.js中的特定子进程运行作业

[英]Run job using specific child process in Node.js

我知道如何派生子流程,但我的要求是,我想使用该子流程仅执行某些工作,例如,单击按钮时,我需要处理表单数据以将其保存,如下所示。 但是此发布路由必须由我创建的特定子进程执行,而不是其他子进程或主进程。

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

后节点v11.7.0发行版提供了'worker_threads'模块,没有实验标记。 非常适合用于单进程和多线程目的。 在11.7.0之前的版本中,您需要传递--experimental-worker标志才能访问它。

访问官方文档工作线程

/* 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 */);
})

现在为工作进程编写脚本

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 ...

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM