параллельное выполнение цикла Python (одновременное выполнение задач)

Внутри цикла отправляется запрос на удаление снепшота виртуальной машины.
Но так как цикл идет один за одним, пока один не завершен второй не запускается на удаление.
Как можно сделать несколько(3-5) запросов одновременно?

#!/usr/bin/python -u
import sys
import argparse
from pysphere import VIServer # Tested with vCenter Server 5.5.0 and pysphere package 0.1.7

# Main function
def purgeSnapshotStage():
	env = parser.parse_args().env

	# Get environment specific variables
	vmList = globals()[env + "VmList"]

	# Connect to vCenter
	vmServer = VIServer()
	vmServer.connect("MY_URL", username, password)

	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)

	vmServer.disconnect()

if __name__ == "__main__":
	purgeSnapshotStage()

Спасибо, @RayRom

Подскажите в чем ошибка
vmList - содержит 16 имен vmName
Мой код 16 раз выполняется на последнем vmName почему-то:

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

В оригинальном варианте перебираются все 16 машин

	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

Надо передавать функции не список машин, а только одну машину. Соответственно, фунцкию надо поменять так, чтобы принимала только одну машину. И количество тредов должно быть равным количеству машин в списке.

Остановился на вот этом варианте - запускает удаление снэпшотов на 16 машинах одновременно

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

def purgeSnapshotStage(vmName):
    # 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 + "   vmName:   " + 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 = 16  # number of VMs "parallelness"
pool = Pool(pool_size)

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

pool.close()
pool.join()