问题描述
我非常猛烈地撞到墙上。问题是我在主线程中使用以下形式调用一个函数:
const {StaticPool} = require("node-worker-threads-pool");
const friendsTableWorkers = (result) => {
const pool = new StaticPool({
size: 8,task: "./worker.js",workerData: result
})
const nums = [23,25]
let buffer = []
const size = Int32Array.BYTES_PER_ELEMENT*nums.length
const sharedBuffer = new SharedArrayBuffer(size)
const sharedArray = new Int32Array(sharedBuffer)
nums.forEach((num,index) => {
Atomics.store(sharedArray,index,num);
})
pool.exec(sharedArray).then(res => {
buffer.push( res )
}).finally(()=>{
console.log( buffer )
})
return buffer
}
反过来,使用以下形式的固定工作线程池:
const { parentPort,workerData } = require("worker_threads")
const _ = require('lodash')
const { idToEnsembl } = require('./supportFunctionsBackend.js')
function friendSeeker(n) {
console.log(n)
let res = workerData.map(x => x._doc)
return {
ensemblGeneId: idToEnsembl(n),nodeidentifier: n,genesetFriends: _.countBy(res,(o) => {
return (o.nodes.includes(n))
}).true}
}
parentPort.on("message",(param) => {
param.forEach( friend => {
if (typeof friend !== "number") {
throw new Error("param must be a number.");
}
const result = friendSeeker(friend);
parentPort.postMessage(result);
})
})
但是,当我运行它时,我得到以下信息:
23
[
{
ensemblGeneId: 'ENSG00000000003',nodeidentifier: 23,genesetFriends: 2249
}
]
25
真正的结果应该是:
[
{
ensemblGeneId: 'ENSG00000000003',genesetFriends: 2249
},{
ensemblGeneId: 'ENSG00000000005',nodeidentifier: 25,genesetFriends: 321
}
]
或
[
{
ensemblGeneId: 'ENSG00000000005',genesetFriends: 321
},{
ensemblGeneId: 'ENSG00000000003',genesetFriends: 2249
}
]
这意味着只有一个工人将他的结果推送到缓冲区数组中。那么,我的问题是,如何让所有工作人员将他们的结果推送到缓冲区数组中?顺序不重要。
非常感谢您提前
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)