gpt4 book ai didi

javascript - 将缓冲区传递给 ChildProcess Node.js

转载 作者:行者123 更新时间:2023-11-28 19:09:44 26 4
gpt4 key购买 nike

这里我想在 Node.Js 上的子进程中进行图像处理。

如您所见,我获取文件 image.jpg 并希望在子进程中将其写回 hello.jpg:

var node = require('child_process').spawn('node',['-i']);
var fs = require('fs');

node.stdout.on('data',function(data) {
var fs = require('fs');
var gm = require('gm').subClass({ imageMagick: true });

gm(data)
.resize(500, 500)
.toBuffer("jpg", function(err, buffer) {
if (err) {
console.log(err);
}else{
fs.writeFile("hello.jpg", buffer);
}
});
});


var buffer = fs.readFileSync(__dirname + "/image.jpg");
node.stdin.write(buffer);

但是,当我运行此文件时,我收到此错误:

[错误:流产生空缓冲区]

对我来说,缓冲区似乎没有正确传递到子进程?我有什么错吗? 我可以做什么来在子任务中运行图像处理。对我来说,重要的是它不从子进程中的文件中读取。因为我想再次读取一个文件,然后将缓冲区发送到几个进行图像转换的子进程。谢谢!

最佳答案

您没有在子流程中执行任何工作。它只是node -i,没有别的。所有图像处理都发生在主进程中。

要解决这个问题,您实际上可以运行另一个 Node 进程并为其提供一些要执行的脚本,例如 worker.js:

process.stdin.on('data',function(data) {
var fs = require('fs');
var gm = require('gm').subClass({ imageMagick: true });

gm(data)
.resize(500, 500)
.toBuffer("jpg", function(err, buffer) {
if (err) {
console.log(err);
}else{
fs.writeFile("hello.jpg", buffer);
}
});
});

然后您可以从主脚本创建一个子流程:

var node = require('child_process').spawn('node', ['worker.js']);
var fs = require('fs');

var buffer = fs.readFileSync(__dirname + "/image.jpg");
node.stdin.end(buffer);

请注意,我在最后一行使用了 node.stdin.end 来终止工作线程。

看看cluster替代方法的模块。

关于javascript - 将缓冲区传递给 ChildProcess Node.js,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30943250/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com