2017-02-03 6 views
0

내 전류가 시작하기 이전 작업의 마무리를 기다릴 것이다 그래서 (병렬로 실행해야파이썬 : 병렬 실행 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) 

내 16 개 VM의에서 1 일에 의해 제거 스냅 샷을 수행 명령

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): 

, 거기가 수도를 코드에서 다른 오류가있을 수 있습니다.

일반적으로 :이 기능을 병렬 처리하면 성능상의 이점이있을 수 있습니다. 귀하의 병목 현상은 VM웨어 서버가 될 것입니다. 많은 삭제 작업을 동시에 시작할 때 더 빠르지는 않습니다.