webリクエストを介してファイルを受け取ったnode.jsアプリケーションがあり、このファイルに変換プロセスが適用されます。タスクは長時間実行されているので、メインスレッドとは別に実行する必要があります。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の中に適切なアプローチです、または単に指定されたモジュールとのparamsで子プロセスを起動するのであるが、しかしとして「ノード」を指定する必要はありません実行可能?
このアプローチで特に問題はありますか?これは新しいプロセスを開始するいくつかの方法の1つです( '.spawn()'と '.exec()'も同様です)。通常の非同期コールバックを投げることは有用ではないので、 'return'以外の何もしないので、' throw error'は何も役に立ちません。 – jfriend00
長時間実行しているプロセスがCPUバウンドかIOバウンドですか。その質問に対する答えは、どのようなアプローチを使用するかを決める上で非常に重要です。 – JLRishe
私は上記のコードに基づいていました。私は 'node'コマンドを明示的に参照することを避けることを望んでいましたが、それが問題とは見なされない場合、私は問題ありません。 CPU/IOに関しては、それはビデオ変換プロセスなので、両方の可能性があります。しかし、私は今、ビデオ変換プロセスが実際に外部プロセス(ffmpeg)をボンネットの下で生成しているのを見ているので、フォークすることについて心配する必要はないかもしれません(ライブラリを使用していると思っていました)。 –