2017-02-03 144 views
0

我對環路電流不分級1移除快照從我16個虛擬機的Python:並行執行pysphere命令

for vmName in vmList: 
    snapshots = vmServer.get_vm_by_name(vmName).get_snapshots() 
    for i in range(len(snapshots)-3): 
     snapshotName = snapshots[i].get_name() 
     print "Deleting snapshot " + snapshotName + " of " + vmName 
     vmServer.get_vm_by_name(vmName).delete_named_snapshot(snapshotName) 

我需要並行運行它(所以它不會等待以前的工作的完成 - 開始下一個) 我試圖運用「多」,這裏是全碼:

import argparse 
from pysphere import VIServer # Tested with vCenter Server 5.5.0 and pysphere package 0.1.7 
from CONFIG import * # Contains username and password for vCenter connection, list of VM names to take snapshot 
from multiprocessing.pool import ThreadPool as Pool 

def purgeSnapshotStage(vmList): 
    # Connect to vCenter 
    vmServer = VIServer() 
    vmServer.connect("VM_ADDRESS", username, password) 

    snapshots = vmServer.get_vm_by_name(vmName).get_snapshots() 
    for i in range(len(snapshots) - 3): 
     snapshotName = snapshots[i].get_name() 
     print "Deleting snapshot " + snapshotName + " of VM: " + vmName 
     vmServer.get_vm_by_name(vmName).delete_named_snapshot(snapshotName) 

    vmServer.disconnect() 

# Get the environment to delete snapshot from command line 
parser = argparse.ArgumentParser(description="Take snapshot of VMs for stage or stage2") 
parser.add_argument('env', choices=("stage", "stage2", "stage3"), help="Valid value stage or stage2 or stage3") 
env = parser.parse_args().env 
vmList = globals()[env + "VmList"] 

pool_size = 5 # your "parallelness" 
pool = Pool(pool_size) 

for vmName in vmList: 
    pool.apply_async(purgeSnapshotStage, (vmList,)) 

pool.close() 
pool.join() 

但有一個錯誤,因爲它試圖執行「刪除」命令只在最後一個。 沒有找到好的多處理指南,也找不到如何調試它。 需要幫助來查找錯誤。

回答

0

您在這裏有一個錯誤:

for vmName in vmList: 
    pool.apply_async(purgeSnapshotStage, (vmList,)) 

它應該是:

for vmName in vmList: 
    pool.apply_async(purgeSnapshotStage, (vmName,)) 

,然後在函數頭,你需要這樣的:

def purgeSnapshotStage(vmList): 

然後,有可能在你的代碼中出現其他錯誤。

一般:我懷疑並行化這可能會給你任何性能優勢。您的瓶頸將是vmware服務器。當您同時啓動多個刪除作業時速度不會更快。