gpt4 book ai didi

multithreading - 如何在 NodeJS 中进行线程图像处理?

转载 作者:太空宇宙 更新时间:2023-11-03 23:43:04 26 4
gpt4 key购买 nike

我正在 NodeJS 上编写一个图像处理 Web 服务,基本上我需要弄清楚如何使实际的图像处理线程化。当我通过 Apache AB 测试 NodeJS 仅使用一个核心并停止运行时,我肯定在这里做错了什么。我如何重新设计这个简单的应用程序以利用我的服务器 CPU 上的多个内核。

我取消了所有输入过滤并简化了图像处理功能,以便让您了解应用程序结构而不是长代码位。

在 app.js 中

app.get('/generate/:q', function(req, res){
var textString = req.params.q;
res.setHeader("Content-Type", "image/png");
res.end(generator.s());
});

在generate.js

var Canvas = require('canvas')
, Font = Canvas.Font
, fs = require('fs')
, path = require("path")
, plate = new Canvas.Image;

//To keep plate in RAM between requests.
fs.readFile(__dirname + '/plates/dhw132.png', function(err, squid){
if (err) throw err;
plate.src = squid;
});

exports.s = function () {
canvas = new Canvas(731,1024);
ctx = canvas.getContext('2d');
ctx.drawImage(plate, 0, 0, plate.width, plate.height);
return canvas.toBuffer();
}

我如何重写它以使generator.s()成为线程化的?

最佳答案

Node 当然是单线程的,但需要多线程是一个非常有效的用例。我知道有两种方法。

为什么不使用集群。您将获得可配置的进程/线程数量,默认情况下是计算机上的 CPU 数量。集群本质上是跨进程对应用程序进行负载平衡,并透明地处理这些进程共享单个监听 http 端口。

http://nodejs.org/api/cluster.html

这里也有一个包装器:https://github.com/dpweb/cluster-node

另一种选择,您可以直接 fork 该进程,这是一个使用 lame 将上传的文件转换为 mp3 的示例。对于您的情况,您可以将所有图像处理封装在一个单独的应用程序中,因此集群选项可能会更干净。

app.post('/process', function(req, res){
var f = req.files.filen;
fs.rename(f.path, f.name, function(err) {
if (err){
fs.unlink(f.name, ef);
throw err;
return;
}
fs.unlink(f.path, function() {
var ext = "." + req.body.extn;

require('child_process').exec("lame "+f.name, function(err, out, er) {
var nfn = f.name + '.mp3';
res.setHeader('Content-Type', 'application/octet-stream');
res.setHeader('Content-disposition', 'attachment; filename='+nfn);
res.setHeader("Content-Transfer-Encoding: binary");
res.setHeader('Accept-Ranges: bytes');

var size = fs.statSync(nfn).size;
console.log(size, f.name, nfn)
res.setHeader('Content-Length', size);
fs.createReadStream(nfn).pipe(res);
fs.unlink(nfn, ef); fs.unlink(f.name, ef);
})
})
})
})

关于multithreading - 如何在 NodeJS 中进行线程图像处理?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19177962/

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