簡體   English   中英

Python:並行執行pysphere命令

[英]Python: Parallel execution pysphere commands

我當前的for循環從1個虛擬機中刪除快照的方式是1比1

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

但是有一個錯誤,因為它試圖僅對最后一個執行“刪除”命令。 找不到有關多處理的良好指南,也找不到如何調試它。 需要幫助以發現錯誤。

您在這里有一個錯誤:

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

它應該是:

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

然后在函數標題中,您需要這樣做:

def purgeSnapshotStage(vmList):

然后,您的代碼中可能還會出現其他錯誤。

通常:我懷疑並行執行此操作會不會給您帶來任何性能優勢。 您的瓶頸將是vmware服務器。 同時啟動多個刪除作業時,速度不會更快。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM