Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/39.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何并行生成五个子进程_Javascript_Node.js_Parallel Processing_Child Process_Spawn - Fatal编程技术网

Javascript 如何并行生成五个子进程

Javascript 如何并行生成五个子进程,javascript,node.js,parallel-processing,child-process,spawn,Javascript,Node.js,Parallel Processing,Child Process,Spawn,我想并行运行五个spawn命令。我将五个hls流URL传递给循环,这些streamlink命令应该记录视频5秒钟,然后终止这些进程 我尝试了几种异步方式。。。但我不知道如何为每个流独立地等待这5秒钟 我在Windows10上运行这个 这是我最后一次尝试: import { spawn } from "child_process"; import crypto from "crypto" const hls_streams = [ 'https:/

我想并行运行五个spawn命令。我将五个hls流URL传递给循环,这些streamlink命令应该记录视频5秒钟,然后终止这些进程

我尝试了几种异步方式。。。但我不知道如何为每个流独立地等待这5秒钟

我在Windows10上运行这个

这是我最后一次尝试:

import { spawn } from "child_process";
import crypto from "crypto"

const hls_streams = [
    'https://stream1.url',
    'https://stream2.url',
    'https://stream3.url',
    'https://stream4.url',
    'https://stream5.url',
]

for (let i = 0; i < hls_streams.length; i++) {
    const filename = crypto.randomBytes(16).toString("hex");
    const child = spawn('streamlink', [`${urls[i]}`, "best", "-f", "-o", `/temp/${filename}.mp4`]);
    await new Promise(r => setTimeout(r, 5000));
    child.kill()
}
从“child_进程”导入{spawn};
从“加密”导入加密
常量hls_流=[
'https://stream1.url',
'https://stream2.url',
'https://stream3.url',
'https://stream4.url',
'https://stream5.url',
]
for(设i=0;isetTimeout(r,5000));
child.kill()
}

对于五个URL,正确的执行应该只持续5秒…

您可以使用一个循环来创建子项数组,然后等待,然后使用另一个循环来结束它们。要基于现有阵列创建阵列,
map()
可能更方便:

import { spawn } from "child_process";
import crypto from "crypto";

const hls_streams = [
    'https://stream1.url',
    'https://stream2.url',
    'https://stream3.url',
    'https://stream4.url',
    'https://stream5.url',
];

let children = hls_streams.map(url => {
    const filename = crypto.randomBytes(16).toString("hex");
    const child = spawn('streamlink', [`${url}`, "best", "-f", "-o", `/temp/${filename}.mp4`]);
    return child;
});

await new Promise(r => setTimeout(r, 5000));

for(let child of children) {
    child.kill();
}

持续多长时间?您是否看到任何错误?每个流等待5秒,因此至少需要25秒才能完成(因为我正在等待setTimeout承诺)。没有抛出错误,文件已保存到磁盘。是否尝试不在循环中等待?有两个循环,一个用于创建孩子,然后在睡觉后,再次循环以杀死他们。(那声音很暗)
等待
当场等待。因为它在循环中,所以它在那里等待,然后再继续。我同意这种方法