コマンドの出力を確認するために、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
並列実行するにはどうすればよいですか?もっとコーディングする必要があるとしても、標準ライブラリで実行できるものを好みます。