thread-worker

1.0.2 • Public • Published

thread-worker

Node.js环境的工作线程扩展,此扩展十分简单,就是封装了worker_threads模块,方便调用。

模块导出只有一个函数,定义如下:

/**
 * 
 * @param {string} pathfile 
 * @param {object} options 
 * @returns {worker}
 */

function runWorkerThread(file, options = {})

参数可以直接参考Node.js官方文档对new Worker部分的描述。

只是options部分做了扩展,支持以下选项:

选项 说明 是否必须
restart 重启模式,支持always,fail,fail-count;设置为true也认为是always
restartDelay 重启延时毫秒数
restartLimit 针对fail-count模式,失败重启次数限制,若为fail-count模式,但是不设置此选项,则会一直失败重启。
events 事件函数,传递key值为对应的事件名称,value为事件函数,此函数做了包装处理,第一个参数是创建的worker对象,后面的参数和事件函数传递参数一致。

安装

npm i thread-worker

基本使用

'use strict'

const threads = require('thread-worker')

//要通过线程运行的文件以及选项,其参数可以直接参照Node.js官方文档
//如果传递的是文件,要求文件必须是绝对路径,或以 . 开头的相对路径。

//扩展在检测到没有设置eval选项,会自动把a.js格式化为./a.js。

let worker = threads('a.js', {
    //如果你要给a.js传递参数,要使用此选项。
    //请参考官方文档对选项的描述。
    argv: [],

    restart: 'fail',

    restartDelay: 1000,

    events: {
        message: (w, msg) => {
            console.log('get message from', w.threadId, msg)
            await new Promise((rv) => { setTimeout(rv, 1000) })
            w.postMessage({msg: 'ok, recived', time: (new Date).toLocaleString()})
        },

        // w就是worker,扩展做了包装处理,
        // 这样方便拿到worker对象。
        exit: (w, code) => {
            console.log(w.threadId, code, 'exit')
        }
    }
})

worker.on('online', () => {
    console.log(worker.threadId, 'running')
})

worker.postMessage({
    tid: worker.threadId,
    say: 'ok'
})

在a.js文件中,存在以下代码:

'use strict'

const { parentPort } = require('node:worker_threads')

parentPort.on('message', (msg) => {

    console.log('get message', msg)

    parentPort.postMessage({
        pid: process.pid,
        rand: Math.random()
    })

})

Dependencies (0)

    Dev Dependencies (0)

      Package Sidebar

      Install

      npm i thread-worker

      Weekly Downloads

      0

      Version

      1.0.2

      License

      ISC

      Unpacked Size

      16.2 kB

      Total Files

      6

      Last publish

      Collaborators

      • ant-army