0

コマンドの出力を確認するために、N 個のホストに SSH で接続したいと考えています。実行が成功すると 2 秒以内に戻りますが、タイムアウトにはそれぞれ 40 秒かかる場合があります。5 つのホストでわかるように、最良のケースは 10 秒ですが、最悪のケースは 3 分以上です。

したがって、それらを透過的に並行して実行し、最後のものが終了したら、出力 (および発生した場合はエラー)を調べたいと考えています。そして、個々の結果がプロセス全体を遅くすることを望んでいません.


並行して実行する必要がある関数は次のとおりです。

def fetch_results_from_ssh( host):
    try:
        a = login_and_fetch_values()
        return a
    except:
        throw Exception("something")

上記の関数を非同期にしたいラッピングの種類は次のとおりです。

result_futures = []
for i in ["h1","h2","h3"]
    result_futures.append( async( fetch_results_from_ssh( i))

for i in result_futures:
    if i.worked_fine():
        print "host " + host + "value: " + i.value #yes, i did not define host anywhere
    else:
        print "host " + host + "error: " + i.error

並列実行するにはどうすればよいですか?もっとコーディングする必要があるとしても、標準ライブラリで実行できるものを好みます。

4

1 に答える 1

0

スレッドまたはマルチプロセス (http://docs.python.org/dev/library/multiprocessing.html) を使用して、操作を並行して実行できます。ファブリックhttp://docs.fabfile.org/en/1.5/でも同じ目的を達成できます。

于 2012-12-05T13:00:27.587 に答える