gpt4 book ai didi

node.js - 如何并行执行多个nodejs进程

转载 作者:行者123 更新时间:2023-12-03 03:23:53 26 4
gpt4 key购买 nike

我正在使用nodejs捕获视频流,然后使用spawn调用ffmpeg来处理提要。如果我收到多个视频流,我想并行执行此操作。

我可以通过打开多个终端并使用 ffmpeg 命令的不同变体来执行进程来手动模拟此过程。

我知道 NodeJS 是单线程的,我已经审查了异步,但没有弄清楚如何应用它,因为回调起着不可或缺的作用。

本质上,我想并行调用多个 ffmpeg 进程,而无需打开多个终端窗口并处理错误或退出等回调。

例如

//spawn ffmpeg with params
var ffmpegexec = spawn('ffmpeg', ['-i', 'pathname', '-vcodec', 'libx264', '-acodec', 'libfdk_aac', '-threads', '2', '-s', '320x240', 'filename.mp4');

//deal with output
ffmpegexec.stdout.on('data', function(data) {
console.log("stdout: " + data);
});

ffmpegexec.stderr.on('data', function(data) {
console.log("stderr : " + data);
});

ffmpegexec.on('exit', function(code) {

console.log("exit: " + code);
});

我在想,也许我可以在单独的 Nodejs 实例中启动每个新进程,或者不启动,具体取决于您的建议

最佳答案

只需连续多次调用 spawn(...) 即可。

每次调用process.spawn(...)启动一个新的操作系统进程,其中可以并发运行大量进程。您必须为每个实例注册单独的stdout/stderr/exit处理程序,但如果它们相似,您可以使用相同(或相似)的处理程序。

例如,如果您想对不同的文件名运行相同的命令,您可以执行以下操作:

function runFfmpeg(filename) {
var proc = process.spawn('ffmpeg', ['-i', 'pathname', ..., filename]);
proc.stdout.on('data', function(data) { console.log("stdout: " + data); });
proc.stderr.on('data', function(data) { console.log("stderr: " + data); });
proc.on('exit', function(code) { console.log("exit: " + code); });
}

var filenames = ['foo.mp4', 'bar.mp4', 'gah.mp4'];
filenames.forEach(function(filename) { runFfmpeg(filename); });

请记住,这可能会给您的计算机带来巨大负载。您可能需要根据目标物理机上的可用资源(例如,每个物理 CPU 一个进程,每个 CPU 核心一个或两个线程)来限制随时运行的线程/进程数量。

关于node.js - 如何并行执行多个nodejs进程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22924216/

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