2017-05-18 40 views
0

実行する必要がある順番で一連のシェルスクリプトを実行するために、コールバック付きの並列非同期呼び出しを使用するnodejsスクリプトがあります。 (前のステップでクランチされている番号に依存しているデータ分析タスク)Pythonで非同期シェルスクリプトのシーケンスを実行する方法

擬似コードは例をnodejs:

async.parallel([ 
    async.apply('/usr/local/bin/foo some/path/to/some/script.sh 1'), 
    async.apply('/usr/local/bin/foo some/path/to/some/script.sh 2'), 
], function() { 
    async.parallel([async.apply('/usr/local/bin/foo some/path/to/some/script.sh 3')]; 
}); 

だから、同時に最初の2を実行しますと、彼らはきたときどちらも完了し、次のものを実行してください。実際には、これは多くのレベルの深いです。私はこれをPythonバージョンに置き換えようとしていますが、それを実現するためにどのモジュール/パッケージを利用するのか苦労しています。

検索では、これをPythonで行うためのさまざまな方法が用意されています。これは、どちらを実行するかを少し厄介にしています。などAsyncio、サブプロセスは、

答えて

0

あなたはPool.mapは、非同期配列の各要素(第二引数)を持つ関数(最初の引数)を呼び出しますmultiprocessingsubprocessモジュール

from multiprocessing import Pool 
from subprocess import call 

Pool(2).map(call, [ 
    ["/usr/local/bin/foo some/path/to/some/script.sh", "1"], 
    ["/usr/local/bin/foo some/path/to/some/script.sh", "2"] 
]) 

call(["/usr/local/bin/foo some/path/to/some/script.sh", "3"]) 

を使用することができます。すべての呼び出しが終了すると、結果を含むリスト(この場合は使用されません)が返され、コードは通常どおり実行されます。したがって、最初の2つが完了すると3番目のスクリプトが実行されます

関連する問題