2016-07-18 4 views
0

私のエクスプレスサーバーで、子プロセスを使用してPythonプログラムを実行しようとしています。このメソッドは、単純なNodeJSであれば機能しますが、APIのエンドポイントでは機能しません。明示的エンドポイントの子プロセスの生成

var spawn = require('child_process').spawn, 
    a = spawn('python', ['test.py']); 

router.get('/test', function(req, res, next) { 

a.stdout.on('data', function(data){ 

    console.log(data.toString()); 

    }); 

    a.stdin.write(JSON.stringify("Hello")); 
    a.stdin.end(); 
}); 

pythonプログラムは単にhelloを出力します。

ここでの問題は何ですか。どのように解決するのですか。

ありがとうございました!

答えて

3

test.pyソースコードが表示されていない場合は、すべてのデータが出力された後にtest.pyが終了すると仮定しています。そのような場合は、spawn()内のコールをルートハンドラに移動する必要があります。

このルートハンドラが頻繁に呼び出される場合は、ある種のキュー/プールを使用して、特定の時点で生成されるプロセス数を制限する必要があります。それがなければ、システムリソースを使い果たす可能性があります。

+0

pythonファイルのメインラインには1行しかありません: 'print(" Hello ")' – QuikProBroNa

+0

それでもまだ動作していません... – QuikProBroNa

+0

"うまくいきません"とは分かりません。エラーはありますか?何が起こるかどうか? – mscdex

関連する問題