2016-04-25 14 views
3

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で子プロセスを起動するのであるが、しかしとして「ノード」を指定する必要はありません実行可能?

+0

このアプローチで特に問題はありますか?これは新しいプロセスを開始するいくつかの方法の1つです( '.spawn()'と '.exec()'も同様です)。通常の非同期コールバックを投げることは有用ではないので、 'return'以外の何もしないので、' throw error'は何も役に立ちません。 – jfriend00

+0

長時間実行しているプロセスがCPUバウンドかIOバウンドですか。その質問に対する答えは、どのようなアプローチを使用するかを決める上で非常に重要です。 – JLRishe

+0

私は上記のコードに基づいていました。私は 'node'コマンドを明示的に参照することを避けることを望んでいましたが、それが問題とは見なされない場合、私は問題ありません。 CPU/IOに関しては、それはビデオ変換プロセスなので、両方の可能性があります。しかし、私は今、ビデオ変換プロセスが実際に外部プロセス(ffmpeg)をボンネットの下で生成しているのを見ているので、フォークすることについて心配する必要はないかもしれません(ライブラリを使用していると思っていました)。 –

答えて

2

node.jsはモジュールを実行するための 'fork'関数を提供していますが、process.argv配列を処理してコマンドライン引数を待っているかのように記述する必要があります。

コマンド呼び出しビーイング:

child_process.fork(modulePath[, args][, options]) 

詳細here

私の特定のケースでは、フォークはすでに私が使用しているnode.jsライブラリによってフォークが作成されているので、おそらく意味をなさないでしょう。

+0

それぞれのメッセージは別のメッセージと完全に分離されていますか?つまり、子プロセスフォークに2つのメッセージを送信すると、それらは互いに独立して完全に実行されますか? – narruc

関連する問題