我在访问javascript函数或worker线程中的任何变量时遇到了问题。我正在使用WebWorker-thread nodejs库来执行多线程。
var fs = require('fs');
var path = require('path');
var threadPool=Worker.createPool(5).all.eval(writeKeywordsToFile);
function getKeywords() {
var keywords = ["Restaurant", "Food", "Cusine"];
for (var i = 0; i < keywords.length; i++) {
threadPool.any.eval('writeKeywordsToFile(' + JSON.stringify(keywords[i]) + ',' + i + ',' + JSON.stringify(path.join(__dirname, '../', 'tmp/')) + ')', function (err, val) {
console.log(' [' + this.id + '] ---- >' + err);
});
//writeKeywordsToFile(keywords[i], i , path.join(__dirname, '../', 'tmp/'));
}
}
function writeKeywordsToFile(keywords, i, dirPath) {
if (keywords != undefined) {
var fileName = "Document_" + i + ".txt";
console.log(fileName);
var stream = fs.createWriteStream(dirPath + fileName, fs);
stream.once('open', function (fd) {
console.log('stream open');
stream.write(keywords + "\r\n");
stream.end();
});
}
return keywords;
}
getKeywords();无法访问文件系统以创建数据流和写入文件。如何在writeKeywordsToFile()中访问任何javascript函数或变量,任何解决方法?
发布于 2015-07-14 16:26:53
工作人员只能通过向原始作用域发送消息/从该作用域接收消息来与该作用域进行通信。无论出于何种意图和目的,您都应该将线程视为生活在它自己的单独作用域中。我承认我的经验完全是基于实际的网络工作者,所以我不确定这在多大程度上适用于你的基于节点的解决方案(尽管它应该适用,因为共享作用域上的多线程会给你的代码带来地狱和诅咒)
因此,你在主线程的全局作用域中得到的任何东西都不存在于它的worker作用域中……
如果你想对它做任何事情,你必须在worker中使用(‘fs’)。
https://stackoverflow.com/questions/31401273
复制相似问题