【发布时间】:2016-04-25 20:38:03
【问题描述】:
我有一个 node.js 应用程序,它通过网络请求接收文件,然后将转换过程应用于该文件。由于任务长时间运行,因此需要与主线程分开运行。
目前我刚刚通过setTimeout() 调用了必要的代码。为了将主应用程序与转换进程隔离开来,我想将它移到一个子进程中,因为它运行时间很长,我想将主代码与正在完成的工作隔离开来(我是不是太担心了?)。目前我正在打电话:
const execFile = require('child_process').execFile;
const child = execFile('node', './myModule.js', (error, stdout, stderr) => {
if (error) {
throw error;
}
console.log(stdout);
});
这是 node.js 中的正确方法,还是简单地使用指定的模块和参数启动子进程,但不必将“节点”指定为可执行文件?
【问题讨论】:
-
您对这种方法有什么特别的问题吗?这是启动新进程的几种方法之一(
.spawn()和.exec()相似)。我可以告诉您,您的throw error没有任何用处,因为在任何有用的地方都无法捕获常规异步回调,因此它与return没有什么不同。 -
您的长时间运行的进程是受 CPU 限制还是受 IO 限制?该问题的答案对于确定使用哪种方法非常重要。
-
我的上面的代码是基于我的一个例子。我希望避免显式引用“节点”命令,但如果这不被视为问题,那么我很好。至于 CPU/IO,它是一个视频转换过程,所以可能两者兼而有之。不过,我现在看到视频转换过程实际上是在后台生成一个外部进程 (ffmpeg),所以我可能不需要担心分叉(我原以为它使用了一个库)。
-
@AndreM:嗨,我可以知道在这个例子中我们应该如何在 UI 中显示结果吗?你能看看我的问题吗? stackoverflow.com/questions/53694567/…
标签: javascript node.js child-process