我的工作线程没有被拾取



我正在我的Node/Typescript应用程序中实现工作线程。现在我已经走了很远,除了事实,我的工作线程似乎没有被拾取/执行。我在函数中添加了一些记录器,应该由工作线程执行,但由于某种原因它没有显示。

我正在调用一个函数来创建一个worker。这样的:

create_worker("./src/core/utils/worker.js", {
term: "amsterdam",
search_grid: chunked_maps_service![i],
path: "../../adapters/worker.ts",
})
下面是创建worker的函数:
import { Worker } from "worker_threads";
const create_worker = (file: string, workerData: {}) =>
new Promise<void>((resolve, reject) => {
const worker = new Worker(file, {
workerData: workerData,
});
worker.on("message", resolve);
worker.on("error", reject);
worker.on("exit", (code) => {
if (code !== 0)
reject(new Error(`Worker stopped with exit code ${code}`));
});
});
export default create_worker;

因为我使用的是typescript,所以我需要将typescript代码编译成javascript代码,以使worker理解它:像这样:

const path = require("path");
const { workerData } = require("worker_threads");
require("ts-node").register();
require(path.resolve(__dirname, workerData.path));

然后是应该在工作线程中执行的函数:

import { parentPort } from "worker_threads";
async function worker() {
console.log("started");
parentPort.postMessage("fixed!");
}

有什么我忘了的吗?

你从来没有在worker中调用过这个函数。

worker中的代码:

import { parentPort } from "worker_threads";
async function worker() {
console.log("started");
parentPort.postMessage("fixed!");
}

只定义了一个名为worker的函数。它从不调用该函数。

如果你想立即调用它,那么你必须像这样调用它:

import { parentPort } from "worker_threads";
async function worker() {
console.log("started");
parentPort.postMessage("fixed!");
}
worker();

供参考,在我构建的worker实现中,我通常要么根据传递给worker的数据执行某些操作,要么worker根据从父进程接收到的消息执行某些操作。

最新更新