繁体   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