首页 > 解决方案 > 有没有办法强制终止 node.js 中的工作线程?

问题描述

我四处寻找我的问题,但无济于事。我想知道是否有办法强制工作人员终止工作线程,即使其任务尚未完成。我有一些代码,如果它以某种方式失败,它会调用自己,这是故意的,即使它可能是不好的代码实践。我尝试使用诸如微作业和线程之类的库,但这些库没有我想要的。这是我尝试对线程执行的操作,但没有成功:

// Module part of threads (taskModule)
expose(async function startTask(taskData, profileData, taskID) {

    await _Task.FetchData(taskData);
    await _Task.GenerateSession(profileData);
    await _Task.RequestPermission(taskID);
    await _Task.SubmitOrder();

    return "finished";
})
// Runs the module (main.js)
const {spawn, Thread, Worker} = require("threads");

let task = null;

async function test() {
    task = await spawn(new Worker('./taskModule'))
    startTask({},{},"0")
}

setTimeout(async function() {
    await Thread.terminate(task)
}, 3000)

test().then(() => {
    console.log('hello')
}).catch(console.error)

我试图测试代码是否会在 3 秒后停止测试,但它似乎还在继续。有没有更好的方法来完成这类任务?

谢谢你的帮助。

标签: javascriptnode.jsmultithreading

解决方案


我已经通过在 Node.JS 中使用集群解决了我的问题,它使用child_process来运行工作程序。

如果有人需要,这里是文档的链接:https ://nodejs.org/api/cluster.html


推荐阅读