2012-12-05 112 views
0

我想通過SSH連接到N個主機來檢查命令的輸出。一次成功的運行將在大約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 

我如何並行執行它?我更喜歡標準庫可行,即使我需要更多代碼。

回答

0

您可以使用線程或多進程(http://docs.python.org/dev/library/multiprocessing.html)並行運行操作。同樣的結局也可以通過織物http://docs.fabfile.org/en/1.5/來實現。